Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencalc.hGo to the documentation of this file.00001 00002 #include <windows.h> 00003 #include <tchar.h> 00004 #include <stdio.h> 00005 #include <string.h> 00006 #include <math.h> 00007 #include <float.h> 00008 #include <malloc.h> 00009 #ifndef DISABLE_HTMLHELP_SUPPORT 00010 #include <htmlhelp.h> 00011 #endif 00012 #include <limits.h> 00013 00014 /* Messages reserved for the main dialog */ 00015 #define WM_CLOSE_STATS (WM_APP+1) 00016 #define WM_HANDLE_CLIPBOARD (WM_APP+2) 00017 #define WM_INSERT_STAT (WM_APP+3) 00018 #define WM_LOAD_STAT (WM_APP+4) 00019 #define WM_START_CONV (WM_APP+5) 00020 #define WM_HANDLE_FROM (WM_APP+6) 00021 #define WM_HANDLE_TO (WM_APP+7) 00022 00023 #ifdef ENABLE_MULTI_PRECISION 00024 #include <mpfr.h> 00025 00026 #ifndef MPFR_DEFAULT_RND 00027 #define MPFR_DEFAULT_RND mpfr_get_default_rounding_mode () 00028 #endif 00029 00030 #define LOCAL_EXP_SIZE 100000000L 00031 #else 00032 00033 #define LOCAL_EXP_SIZE 10000L 00034 00035 #endif 00036 00037 #include "resource.h" 00038 00039 #ifndef IDC_STATIC 00040 #define IDC_STATIC ((DWORD)-1) 00041 #endif 00042 00043 #define CALC_VERSION TEXT("1.11") 00044 00045 #define MAX_CALC_SIZE 256 00046 00047 /*#define USE_KEYBOARD_HOOK*/ 00048 00049 #define SIZEOF(_ar) (sizeof(_ar)/sizeof(_ar[1])) 00050 00051 // RPN.C 00052 00053 enum { 00054 RPN_OPERATOR_PARENT, 00055 RPN_OPERATOR_PERCENT, 00056 RPN_OPERATOR_EQUAL, 00057 00058 RPN_OPERATOR_OR, 00059 RPN_OPERATOR_XOR, 00060 RPN_OPERATOR_AND, 00061 RPN_OPERATOR_LSH, 00062 RPN_OPERATOR_RSH, 00063 RPN_OPERATOR_ADD, 00064 RPN_OPERATOR_SUB, 00065 RPN_OPERATOR_MULT, 00066 RPN_OPERATOR_DIV, 00067 RPN_OPERATOR_MOD, 00068 RPN_OPERATOR_POW, 00069 RPN_OPERATOR_SQR, 00070 00071 RPN_OPERATOR_NONE 00072 }; 00073 00074 typedef union { 00075 #ifdef ENABLE_MULTI_PRECISION 00076 mpfr_t mf; 00077 #else 00078 double f; 00079 INT64 i; 00080 UINT64 u; 00081 #endif 00082 } calc_number_t; 00083 00084 typedef struct { 00085 calc_number_t number; 00086 unsigned int operation; 00087 DWORD base; 00088 } calc_node_t; 00089 00090 void run_operator(calc_node_t *result, calc_node_t *a, 00091 calc_node_t *b, unsigned int operation); 00092 int exec_infix2postfix(calc_number_t *, unsigned int); 00093 void exec_closeparent(calc_number_t *); 00094 int eval_parent_count(void); 00095 void flush_postfix(void); 00096 void exec_change_infix(void); 00097 void start_rpn_engine(void); 00098 void stop_rpn_engine(void); 00099 00100 typedef struct { 00101 char *data; 00102 char *ptr; 00103 UINT wm_msg; 00104 } sequence_t; 00105 00106 typedef struct { 00107 calc_number_t num; 00108 DWORD base; 00109 void *next; 00110 } statistic_t; 00111 00112 enum { 00113 CALC_LAYOUT_SCIENTIFIC=0, 00114 CALC_LAYOUT_STANDARD, 00115 CALC_LAYOUT_CONVERSION, 00116 }; 00117 00118 typedef struct { 00119 HINSTANCE hInstance; 00120 #ifdef USE_KEYBOARD_HOOK 00121 HHOOK hKeyboardHook; 00122 #endif 00123 HWND hWnd; 00124 DWORD layout; 00125 TCHAR buffer[MAX_CALC_SIZE]; 00126 TCHAR source[MAX_CALC_SIZE]; 00127 TCHAR *ptr; 00128 calc_number_t code; 00129 calc_number_t prev; 00130 calc_node_t memory; 00131 statistic_t *stat; 00132 BOOL is_memory; 00133 BOOL is_nan; 00134 BOOL sci_out; 00135 BOOL sci_in; 00136 BOOL usesep; 00137 BOOL is_menu_on; 00138 signed int esp; 00139 DWORD base; 00140 DWORD size; 00141 DWORD degr; 00142 DWORD action; 00143 HWND hStatWnd; 00144 HWND hConvWnd; 00145 sequence_t Clipboard; 00146 sequence_t Convert[2]; 00147 unsigned int last_operator; 00148 unsigned int prev_operator; 00149 TCHAR sDecimal[8]; 00150 TCHAR sThousand[8]; 00151 unsigned int sDecimal_len; 00152 unsigned int sThousand_len; 00153 signed int x_coord; 00154 signed int y_coord; 00155 } calc_t; 00156 00157 extern calc_t calc; 00158 00159 // 00160 #define CALC_E 2.7182818284590452354 00161 00162 #define CALC_PI_2 1.57079632679489661923 00163 #define CALC_PI 3.14159265358979323846 00164 #define CALC_3_PI_2 4.71238898038468985769 00165 #define CALC_2_PI 6.283185307179586476925 00166 00167 #define MODIFIER_INV 0x01 00168 #define MODIFIER_HYP 0x02 00169 #define NO_CHAIN 0x04 00170 00171 void apply_int_mask(calc_number_t *a); 00172 #ifdef ENABLE_MULTI_PRECISION 00173 void validate_rad2angle(calc_number_t *c); 00174 void validate_angle2rad(calc_number_t *c); 00175 #else 00176 __int64 logic_dbl2int(calc_number_t *a); 00177 double logic_int2dbl(calc_number_t *a); 00178 double validate_rad2angle(double a); 00179 double validate_angle2rad(calc_number_t *c); 00180 #endif 00181 void rpn_sin(calc_number_t *c); 00182 void rpn_cos(calc_number_t *c); 00183 void rpn_tan(calc_number_t *c); 00184 void rpn_asin(calc_number_t *c); 00185 void rpn_acos(calc_number_t *c); 00186 void rpn_atan(calc_number_t *c); 00187 void rpn_sinh(calc_number_t *c); 00188 void rpn_cosh(calc_number_t *c); 00189 void rpn_tanh(calc_number_t *c); 00190 void rpn_asinh(calc_number_t *c); 00191 void rpn_acosh(calc_number_t *c); 00192 void rpn_atanh(calc_number_t *c); 00193 BOOL rpn_validate_result(calc_number_t *c); 00194 void rpn_int(calc_number_t *c); 00195 void rpn_frac(calc_number_t *c); 00196 void rpn_reci(calc_number_t *c); 00197 void rpn_fact(calc_number_t *c); 00198 void rpn_not(calc_number_t *c); 00199 void rpn_pi(calc_number_t *c); 00200 void rpn_2pi(calc_number_t *c); 00201 void rpn_sign(calc_number_t *c); 00202 void rpn_exp2(calc_number_t *c); 00203 void rpn_exp3(calc_number_t *c); 00204 void rpn_sqrt(calc_number_t *c); 00205 void rpn_cbrt(calc_number_t *c); 00206 void rpn_exp(calc_number_t *c); 00207 void rpn_exp10(calc_number_t *c); 00208 void rpn_ln(calc_number_t *c); 00209 void rpn_log(calc_number_t *c); 00210 void rpn_ave(calc_number_t *c); 00211 void rpn_sum(calc_number_t *c); 00212 void rpn_s(calc_number_t *c); 00213 void rpn_s_m1(calc_number_t *c); 00214 void rpn_dms2dec(calc_number_t *c); 00215 void rpn_dec2dms(calc_number_t *c); 00216 void rpn_zero(calc_number_t *c); 00217 void rpn_copy(calc_number_t *dst, calc_number_t *src); 00218 int rpn_is_zero(calc_number_t *c); 00219 void rpn_alloc(calc_number_t *c); 00220 void rpn_free(calc_number_t *c); 00221 00222 // 00223 00224 void prepare_rpn_result_2(calc_number_t *rpn, TCHAR *buffer, int size, int base); 00225 void convert_text2number_2(calc_number_t *a); 00226 void convert_real_integer(unsigned int base); 00227 00228 // 00229 00230 INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); 00231 00232 // 00233 00234 void ConvExecute(HWND hWnd); 00235 void ConvAdjust(HWND hWnd, int n_cat); 00236 void ConvInit(HWND hWnd); Generated on Thu Feb 9 04:38:56 2012 for ReactOS by
1.6.3
|