Make acpi compile with Visual C++
[reactos.git] / base / applications / calc / calc.h
1 #ifndef __CALC_H__
2 #define __CALC_H__
3
4 #include <windows.h>
5 #include <tchar.h>
6 #include <stdio.h>
7 #include <string.h>
8 #include <math.h>
9 #include <float.h>
10 #include <malloc.h>
11 #ifndef DISABLE_HTMLHELP_SUPPORT
12 #include <htmlhelp.h>
13 #endif
14 #include <limits.h>
15
16 /* Messages reserved for the main dialog */
17 #define WM_CLOSE_STATS (WM_APP+1)
18 #define WM_HANDLE_CLIPBOARD (WM_APP+2)
19 #define WM_INSERT_STAT (WM_APP+3)
20 #define WM_LOAD_STAT (WM_APP+4)
21 #define WM_START_CONV (WM_APP+5)
22 #define WM_HANDLE_FROM (WM_APP+6)
23 #define WM_HANDLE_TO (WM_APP+7)
24
25 #ifdef ENABLE_MULTI_PRECISION
26 #include <mpfr.h>
27
28 #ifndef MPFR_DEFAULT_RND
29 #define MPFR_DEFAULT_RND mpfr_get_default_rounding_mode ()
30 #endif
31
32 #define LOCAL_EXP_SIZE 100000000L
33 #else
34
35 #define LOCAL_EXP_SIZE 10000L
36
37 #endif
38
39 #include "resource.h"
40
41 #ifndef IDC_STATIC
42 #define IDC_STATIC ((DWORD)-1)
43 #endif
44
45 #define CALC_VERSION TEXT("1.10")
46
47 #define MAX_CALC_SIZE 256
48
49 /*#define USE_KEYBOARD_HOOK*/
50
51 #define SIZEOF(_ar) (sizeof(_ar)/sizeof(_ar[1]))
52
53 // RPN.C
54 /*
55 typedef struct _postfix_item_t {
56 unsigned int type;
57 union {
58 #ifdef ENABLE_MULTI_PRECISION
59 mpfr_t mf;
60 #else
61 double f;
62 INT64 i;
63 #endif
64 struct {
65 unsigned short int code;
66 unsigned short int elem;
67 } action;
68 } number;
69 struct _postfix_item_t *next;
70 } postfix_item_t;
71
72 void flush_postfix(void);
73 void infix2postfix(char *in_str);
74 postfix_item_t *exec_postfix(void);
75 */
76
77 //
78
79 enum {
80 RPN_OPERATOR_PARENT,
81 RPN_OPERATOR_PERCENT,
82 RPN_OPERATOR_EQUAL,
83
84 RPN_OPERATOR_OR,
85 RPN_OPERATOR_XOR,
86 RPN_OPERATOR_AND,
87 RPN_OPERATOR_LSH,
88 RPN_OPERATOR_RSH,
89 RPN_OPERATOR_ADD,
90 RPN_OPERATOR_SUB,
91 RPN_OPERATOR_MULT,
92 RPN_OPERATOR_DIV,
93 RPN_OPERATOR_MOD,
94 RPN_OPERATOR_POW,
95 RPN_OPERATOR_SQR,
96 };
97
98 typedef union {
99 #ifdef ENABLE_MULTI_PRECISION
100 mpfr_t mf;
101 #else
102 double f;
103 INT64 i;
104 UINT64 u;
105 #endif
106 } calc_number_t;
107
108 typedef struct {
109 calc_number_t number;
110 unsigned int operation;
111 DWORD base;
112 } calc_node_t;
113
114 void run_operator(calc_node_t *result, calc_node_t *a,
115 calc_node_t *b, unsigned int operation);
116 int exec_infix2postfix(calc_number_t *, unsigned int);
117 void exec_closeparent(calc_number_t *);
118 int eval_parent_count(void);
119 void flush_postfix(void);
120 void exec_change_infix(void);
121 void start_rpn_engine(void);
122 void stop_rpn_engine(void);
123
124 typedef struct {
125 char *data;
126 char *ptr;
127 int wm_msg;
128 } sequence_t;
129
130 typedef struct {
131 calc_number_t num;
132 DWORD base;
133 void *next;
134 } statistic_t;
135
136 enum {
137 CALC_LAYOUT_SCIENTIFIC=0,
138 CALC_LAYOUT_STANDARD,
139 CALC_LAYOUT_CONVERSION,
140 };
141
142 typedef struct {
143 HINSTANCE hInstance;
144 #ifdef USE_KEYBOARD_HOOK
145 HHOOK hKeyboardHook;
146 #endif
147 HWND hWnd;
148 DWORD layout;
149 TCHAR buffer[MAX_CALC_SIZE];
150 TCHAR source[MAX_CALC_SIZE];
151 TCHAR *ptr;
152 calc_number_t code;
153 calc_number_t prev;
154 calc_node_t memory;
155 statistic_t *stat;
156 BOOL is_memory;
157 BOOL is_nan;
158 BOOL sci_out;
159 BOOL sci_in;
160 BOOL usesep;
161 BOOL is_menu_on;
162 signed int esp;
163 DWORD base;
164 DWORD size;
165 DWORD degr;
166 DWORD action;
167 HWND hStatWnd;
168 HWND hConvWnd;
169 sequence_t Clipboard;
170 sequence_t Convert[2];
171 unsigned int last_operator;
172 unsigned int prev_operator;
173 TCHAR sDecimal[8];
174 TCHAR sThousand[8];
175 unsigned int sDecimal_len;
176 unsigned int sThousand_len;
177 signed int x_coord;
178 signed int y_coord;
179 } calc_t;
180
181 extern calc_t calc;
182
183 //
184 #define CALC_E 2.7182818284590452354
185
186 #define CALC_PI_2 1.57079632679489661923
187 #define CALC_PI 3.14159265358979323846
188 #define CALC_3_PI_2 4.71238898038468985769
189 #define CALC_2_PI 6.283185307179586476925
190
191 #define MODIFIER_INV 0x01
192 #define MODIFIER_HYP 0x02
193
194 void apply_int_mask(calc_number_t *a);
195 #ifdef ENABLE_MULTI_PRECISION
196 void validate_rad2angle(calc_number_t *c);
197 void validate_angle2rad(calc_number_t *c);
198 #else
199 __int64 logic_dbl2int(calc_number_t *a);
200 double logic_int2dbl(calc_number_t *a);
201 double validate_rad2angle(double a);
202 double validate_angle2rad(calc_number_t *c);
203 #endif
204 void rpn_sin(calc_number_t *c);
205 void rpn_cos(calc_number_t *c);
206 void rpn_tan(calc_number_t *c);
207 void rpn_asin(calc_number_t *c);
208 void rpn_acos(calc_number_t *c);
209 void rpn_atan(calc_number_t *c);
210 void rpn_sinh(calc_number_t *c);
211 void rpn_cosh(calc_number_t *c);
212 void rpn_tanh(calc_number_t *c);
213 void rpn_asinh(calc_number_t *c);
214 void rpn_acosh(calc_number_t *c);
215 void rpn_atanh(calc_number_t *c);
216 BOOL rpn_validate_result(calc_number_t *c);
217 void rpn_int(calc_number_t *c);
218 void rpn_frac(calc_number_t *c);
219 void rpn_reci(calc_number_t *c);
220 void rpn_fact(calc_number_t *c);
221 void rpn_not(calc_number_t *c);
222 void rpn_pi(calc_number_t *c);
223 void rpn_2pi(calc_number_t *c);
224 void rpn_sign(calc_number_t *c);
225 void rpn_exp2(calc_number_t *c);
226 void rpn_exp3(calc_number_t *c);
227 void rpn_sqrt(calc_number_t *c);
228 void rpn_cbrt(calc_number_t *c);
229 void rpn_exp(calc_number_t *c);
230 void rpn_exp10(calc_number_t *c);
231 void rpn_ln(calc_number_t *c);
232 void rpn_log(calc_number_t *c);
233 void rpn_ave(calc_number_t *c);
234 void rpn_sum(calc_number_t *c);
235 void rpn_s(calc_number_t *c);
236 void rpn_s_m1(calc_number_t *c);
237 void rpn_dms2dec(calc_number_t *c);
238 void rpn_dec2dms(calc_number_t *c);
239 void rpn_zero(calc_number_t *c);
240 void rpn_copy(calc_number_t *dst, calc_number_t *src);
241 int rpn_is_zero(calc_number_t *c);
242 void rpn_alloc(calc_number_t *c);
243 void rpn_free(calc_number_t *c);
244
245 //
246
247 void prepare_rpn_result_2(calc_number_t *rpn, TCHAR *buffer, int size, int base);
248 void convert_text2number_2(calc_number_t *a);
249 void convert_real_integer(unsigned int base);
250
251 //
252
253 INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
254
255 //
256
257 void ConvExecute(HWND hWnd);
258 void ConvAdjust(HWND hWnd, int n_cat);
259 void ConvInit(HWND hWnd);
260
261 #endif