Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

calc.h

Go 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 doxygen 1.6.3

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.