ReactOS 0.4.16-dev-306-g647d351
winmain.c File Reference
#include "calc.h"
Include dependency graph for winmain.c:

Go to the source code of this file.

Classes

struct  key2code_t
 
struct  key3code_t
 
struct  function_table_t
 
struct  BTNINFO
 
struct  _update_check_menus
 
struct  radio_config_t
 

Macros

#define HTMLHELP_PATH(_pt)   _T("%systemroot%\\Help\\calc.chm::") _T(_pt)
 
#define MAKE_BITMASK4(_show_b16, _show_b10, _show_b8, _show_b2)
 
#define MAKE_BITMASK5(_transl, _is_stats, _is_ctrl, _show_b16, _show_b10, _show_b8, _show_b2)
 
#define KEY_IS_UP   0x80000000
 
#define KEY_WAS_DOWN   0x40000000
 
#define BITMASK_IS_ASCII   0x80
 
#define BITMASK_IS_STATS   0x40
 
#define BITMASK_IS_CTRL   0x20
 
#define BITMASK_HEX_MASK   0x08
 
#define BITMASK_DEC_MASK   0x04
 
#define BITMASK_OCT_MASK   0x02
 
#define BITMASK_BIN_MASK   0x01
 
#define CALC_CLR_RED   RGB(0xFF, 0x00, 0x00)
 
#define CALC_CLR_BLUE   RGB(0x00, 0x00, 0xFF)
 
#define CALC_CLR_PURP   RGB(0xFF, 0x00, 0xFF)
 
#define CTRL_FLAG   0x100
 
#define ALT_FLAG   0x200
 
#define CTRL_A   (0x0001+'A'-'A')
 
#define CTRL_C   (0x0001+'C'-'A')
 
#define CTRL_D   (0x0001+'D'-'A')
 
#define CTRL_L   (0x0001+'L'-'A')
 
#define CTRL_M   (0x0001+'M'-'A')
 
#define CTRL_P   (0x0001+'P'-'A')
 
#define CTRL_R   (0x0001+'R'-'A')
 
#define CTRL_S   (0x0001+'S'-'A')
 
#define CTRL_T   (0x0001+'T'-'A')
 
#define CTRL_V   (0x0001+'V'-'A')
 
#define CTRL_Z   (0x0001+'Z'-'A')
 

Typedefs

typedef void(* rpn_callback1) (calc_number_t *)
 
typedef struct BTNINFOLPBTNINFO
 

Functions

static void run_fe (calc_number_t *number)
 
static void run_dat_sta (calc_number_t *number)
 
static void run_mp (calc_number_t *c)
 
static void run_mm (calc_number_t *c)
 
static void run_ms (calc_number_t *c)
 
static void run_mw (calc_number_t *c)
 
static void run_canc (calc_number_t *c)
 
static void run_rpar (calc_number_t *c)
 
static void run_lpar (calc_number_t *c)
 
static void UpdateNumberIntl (void)
 
static int LoadRegInt (LPCTSTR lpszApp, LPCTSTR lpszKey, int iDefault)
 
static void SaveRegInt (LPCTSTR lpszApp, LPCTSTR lpszKey, int iValue)
 
static void load_config (void)
 
static void save_config (void)
 
static LRESULT post_key_press (LPARAM lParam, WORD idc)
 
static int vk2ascii (unsigned int vk)
 
static int process_vk_key (WPARAM wParam, LPARAM lParam)
 
static void update_lcd_display (HWND hwnd)
 
static void update_parent_display (HWND hWnd)
 
static void build_operand (HWND hwnd, DWORD idc)
 
static void prepare_rpn_result (calc_number_t *rpn, TCHAR *buffer, int size, int base)
 
static void set_rpn_result (HWND hwnd, calc_number_t *rpn)
 
static void display_rpn_result (HWND hwnd, calc_number_t *rpn)
 
static int get_modifiers (HWND hWnd)
 
static void convert_text2number (calc_number_t *a)
 
static void update_menu (HWND hWnd)
 
static void enable_allowed_controls (HWND hwnd, DWORD base)
 
static void update_radio (HWND hwnd, unsigned int base)
 
static void update_memory_flag (HWND hWnd, BOOL mem_flag)
 
static void update_n_stats_items (HWND hWnd, TCHAR *buffer, size_t cbBuffer)
 
static void clean_stat_list (void)
 
static void delete_stat_item (int n)
 
static charReadConversion (const char *formula)
 
static INT_PTR CALLBACK DlgStatProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
 
static WPARAM idm_2_idc (int idm)
 
static void CopyMemToClipboard (void *ptr)
 
static void handle_copy_command (HWND hWnd)
 
static charReadClipboard (void)
 
static charhandle_sequence_input (HWND hwnd, sequence_t *seq)
 
static statistic_tupload_stat_number (int n)
 
static void handle_context_menu (HWND hWnd, WPARAM wp, LPARAM lp)
 
static LRESULT CALLBACK SubclassButtonProc (HWND hWnd, WPARAM wp, LPARAM lp)
 
static INT_PTR CALLBACK HotButtonProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
 
static BOOL CALLBACK EnumChildProc (HWND hWnd, LPARAM lParam)
 
static INT_PTR CALLBACK OnSettingChange (HWND hWnd, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK DlgMainProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
 
int WINAPI _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
 

Variables

static const key3code_t key2code []
 
static const key2code_t key2code_base16 []
 
static const key2code_t key2code_base10 []
 
static const WORD operator_codes []
 
static const function_table_t function_table []
 
calc_t calc
 
BTNINFO BtnInfo [255]
 
UINT BtnCount
 
static const struct _update_check_menus upd []
 
static const radio_config_t radio_setup []
 

Macro Definition Documentation

◆ ALT_FLAG

#define ALT_FLAG   0x200

Definition at line 68 of file winmain.c.

◆ BITMASK_BIN_MASK

#define BITMASK_BIN_MASK   0x01

Definition at line 49 of file winmain.c.

◆ BITMASK_DEC_MASK

#define BITMASK_DEC_MASK   0x04

Definition at line 47 of file winmain.c.

◆ BITMASK_HEX_MASK

#define BITMASK_HEX_MASK   0x08

Definition at line 46 of file winmain.c.

◆ BITMASK_IS_ASCII

#define BITMASK_IS_ASCII   0x80

Definition at line 43 of file winmain.c.

◆ BITMASK_IS_CTRL

#define BITMASK_IS_CTRL   0x20

Definition at line 45 of file winmain.c.

◆ BITMASK_IS_STATS

#define BITMASK_IS_STATS   0x40

Definition at line 44 of file winmain.c.

◆ BITMASK_OCT_MASK

#define BITMASK_OCT_MASK   0x02

Definition at line 48 of file winmain.c.

◆ CALC_CLR_BLUE

#define CALC_CLR_BLUE   RGB(0x00, 0x00, 0xFF)

Definition at line 52 of file winmain.c.

◆ CALC_CLR_PURP

#define CALC_CLR_PURP   RGB(0xFF, 0x00, 0xFF)

Definition at line 53 of file winmain.c.

◆ CALC_CLR_RED

#define CALC_CLR_RED   RGB(0xFF, 0x00, 0x00)

Definition at line 51 of file winmain.c.

◆ CTRL_A

#define CTRL_A   (0x0001+'A'-'A')

Definition at line 70 of file winmain.c.

◆ CTRL_C

#define CTRL_C   (0x0001+'C'-'A')

Definition at line 71 of file winmain.c.

◆ CTRL_D

#define CTRL_D   (0x0001+'D'-'A')

Definition at line 72 of file winmain.c.

◆ CTRL_FLAG

#define CTRL_FLAG   0x100

Definition at line 67 of file winmain.c.

◆ CTRL_L

#define CTRL_L   (0x0001+'L'-'A')

Definition at line 73 of file winmain.c.

◆ CTRL_M

#define CTRL_M   (0x0001+'M'-'A')

Definition at line 74 of file winmain.c.

◆ CTRL_P

#define CTRL_P   (0x0001+'P'-'A')

Definition at line 75 of file winmain.c.

◆ CTRL_R

#define CTRL_R   (0x0001+'R'-'A')

Definition at line 76 of file winmain.c.

◆ CTRL_S

#define CTRL_S   (0x0001+'S'-'A')

Definition at line 77 of file winmain.c.

◆ CTRL_T

#define CTRL_T   (0x0001+'T'-'A')

Definition at line 78 of file winmain.c.

◆ CTRL_V

#define CTRL_V   (0x0001+'V'-'A')

Definition at line 79 of file winmain.c.

◆ CTRL_Z

#define CTRL_Z   (0x0001+'Z'-'A')

Definition at line 80 of file winmain.c.

◆ HTMLHELP_PATH

#define HTMLHELP_PATH (   _pt)    _T("%systemroot%\\Help\\calc.chm::") _T(_pt)

Definition at line 23 of file winmain.c.

◆ KEY_IS_UP

#define KEY_IS_UP   0x80000000

Definition at line 40 of file winmain.c.

◆ KEY_WAS_DOWN

#define KEY_WAS_DOWN   0x40000000

Definition at line 41 of file winmain.c.

◆ MAKE_BITMASK4

#define MAKE_BITMASK4 (   _show_b16,
  _show_b10,
  _show_b8,
  _show_b2 
)
Value:
(((_show_b2) << 0) | \
((_show_b8) << 1) | \
((_show_b10) << 2) | \
((_show_b16) << 3))

Definition at line 25 of file winmain.c.

◆ MAKE_BITMASK5

#define MAKE_BITMASK5 (   _transl,
  _is_stats,
  _is_ctrl,
  _show_b16,
  _show_b10,
  _show_b8,
  _show_b2 
)
Value:
(((_show_b2) << 0) | \
((_show_b8) << 1) | \
((_show_b10) << 2) | \
((_show_b16) << 3) | \
((_is_ctrl) << 5) | \
((_is_stats) << 6) | \
((_transl) << 7))

Definition at line 31 of file winmain.c.

Typedef Documentation

◆ LPBTNINFO

◆ rpn_callback1

typedef void(* rpn_callback1) (calc_number_t *)

Definition at line 187 of file winmain.c.

Function Documentation

◆ _tWinMain()

int WINAPI _tWinMain ( HINSTANCE  hInstance,
HINSTANCE  hPrevInstance,
LPTSTR  lpCmdLine,
int  nShowCmd 
)

Definition at line 1938 of file winmain.c.

1940{
1941 MSG msg;
1942 DWORD dwLayout;
1943
1944 /* Initialize controls for theming & manifest support */
1946
1948
1949 calc.x_coord = -1;
1950 calc.y_coord = -1;
1951
1952 load_config();
1954
1956
1958
1960 hInstance,
1962 IMAGE_ICON,
1963 0,
1964 0,
1966
1968 hInstance,
1970 IMAGE_ICON,
1973 LR_SHARED);
1974
1975 do {
1976 /* ignore hwnd: dialogs are already visible! */
1978 dwLayout = IDD_DIALOG_SCIENTIFIC;
1979 else
1981 dwLayout = IDD_DIALOG_CONVERSION;
1982 else
1983 dwLayout = IDD_DIALOG_STANDARD;
1984
1985 /* This call will always fail if UNICODE for Win9x */
1987 break;
1988
1989 while (GetMessage(&msg, NULL, 0, 0)) {
1990#ifndef USE_KEYBOARD_HOOK
1991 if ((msg.message == WM_KEYUP ||
1992 msg.message == WM_KEYDOWN) &&
1994 process_vk_key(msg.wParam, msg.lParam);
1995#endif
1998 }
1999
2000 save_config();
2001 } while (calc.action != IDC_STATIC);
2002
2004
2005 Theme_Stop();
2006 HtmlHelp_Stop();
2007
2008 return 0;
2009}
#define msg(x)
Definition: auth_time.c:54
#define IDD_DIALOG_STANDARD
Definition: resource.h:14
#define IDI_CALC
Definition: resource.h:22
#define IDD_DIALOG_CONVERSION
Definition: resource.h:17
#define IDD_DIALOG_SCIENTIFIC
Definition: resource.h:13
#define IDC_STATIC
Definition: resource.h:4
void start_rpn_engine(void)
Definition: rpn_ieee.c:479
void HtmlHelp_Stop(void)
Definition: htmlhelp.c:60
void HtmlHelp_Start(HINSTANCE hInstance)
Definition: htmlhelp.c:50
void Theme_Start(HINSTANCE hInstance)
Definition: theme.c:105
void Theme_Stop(void)
Definition: theme.c:120
@ CALC_LAYOUT_SCIENTIFIC
Definition: calc.h:161
@ CALC_LAYOUT_CONVERSION
Definition: calc.h:163
void stop_rpn_engine(void)
Definition: rpn_ieee.c:484
HINSTANCE hInstance
Definition: charmap.c:19
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:870
#define NULL
Definition: types.h:112
unsigned long DWORD
Definition: ntddk_ex.h:95
HINSTANCE hInstance
Definition: calc.h:167
signed int y_coord
Definition: calc.h:204
DWORD layout
Definition: calc.h:174
DWORD action
Definition: calc.h:192
HICON hSmIcon
Definition: calc.h:173
signed int x_coord
Definition: calc.h:203
HICON hBgIcon
Definition: calc.h:172
BOOL is_menu_on
Definition: calc.h:187
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
static void load_config(void)
Definition: winmain.c:301
static INT_PTR CALLBACK DlgMainProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: winmain.c:1426
static void save_config(void)
Definition: winmain.c:334
calc_t calc
Definition: winmain.c:247
static int process_vk_key(WPARAM wParam, LPARAM lParam)
Definition: winmain.c:419
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define WM_KEYUP
Definition: winuser.h:1719
#define IMAGE_ICON
Definition: winuser.h:212
#define CreateDialog
Definition: winuser.h:5761
#define SM_CYSMICON
Definition: winuser.h:1016
#define GetMessage
Definition: winuser.h:5802
#define SM_CXSMICON
Definition: winuser.h:1015
#define LR_SHARED
Definition: winuser.h:1103
#define LoadImage
Definition: winuser.h:5827
#define LR_DEFAULTSIZE
Definition: winuser.h:1097
#define WM_KEYDOWN
Definition: winuser.h:1718
#define DispatchMessage
Definition: winuser.h:5777
#define MAKEINTRESOURCE
Definition: winuser.h:591
int WINAPI GetSystemMetrics(_In_ int)

◆ build_operand()

static void build_operand ( HWND  hwnd,
DWORD  idc 
)
static

Definition at line 580 of file winmain.c.

581{
582 unsigned int i = 0, n;
583 size_t cbPtr;
584
585 if (idc == IDC_BUTTON_DOT) {
586 /* if dot is the first char, it's added automatically */
587 if (calc.buffer == calc.ptr) {
588 *calc.ptr++ = _T('0');
589 *calc.ptr++ = _T('.');
590 *calc.ptr = _T('\0');
592 return;
593 }
594 /* if pressed dot and it's already in the string, then return */
595 if (_tcschr(calc.buffer, _T('.')) != NULL)
596 return;
597 }
598 if (idc != IDC_STATIC) {
599 while (idc != key2code[i].idc) i++;
600 }
601 n = calc.ptr - calc.buffer;
602 if (idc == IDC_BUTTON_0 && n == 0) {
603 /* no need to put the dot because it's handled by update_lcd_display() */
604 calc.buffer[0] = _T('0');
605 calc.buffer[1] = _T('\0');
607 return;
608 }
609 switch (calc.base) {
610 case IDC_RADIO_HEX:
611 if (n >= 16)
612 return;
613 break;
614 case IDC_RADIO_DEC:
615 if (n >= SIZEOF(calc.buffer)-1)
616 return;
617 if (calc.sci_in) {
618 if (idc != IDC_STATIC)
619 calc.esp = (calc.esp * 10 + (key2code[i].key-'0')) % LOCAL_EXP_SIZE;
620 if (calc.ptr == calc.buffer)
621 StringCbPrintf(calc.ptr, sizeof(calc.buffer), _T("0.e%+d"), calc.esp);
622 else {
623 /* adds the dot at the end if the number has no decimal part */
624 if (!_tcschr(calc.buffer, _T('.')))
625 *calc.ptr++ = _T('.');
626
627 cbPtr = sizeof(calc.buffer) - ((BYTE*)calc.ptr - (BYTE*)calc.buffer);
628 StringCbPrintf(calc.ptr, cbPtr, _T("e%+d"), calc.esp);
629 }
631 return;
632 }
633 break;
634 case IDC_RADIO_OCT:
635 if (n >= 22)
636 return;
637 break;
638 case IDC_RADIO_BIN:
639 if (n >= 64)
640 return;
641 break;
642 }
643
644 cbPtr = sizeof(calc.buffer) - ((BYTE*)calc.ptr - (BYTE*)calc.buffer);
646 _T("%C"), key2code[i].key);
647
649}
#define IDC_BUTTON_0
Definition: resource.h:57
#define IDC_RADIO_BIN
Definition: resource.h:26
#define IDC_RADIO_OCT
Definition: resource.h:25
#define IDC_RADIO_DEC
Definition: resource.h:24
#define IDC_BUTTON_DOT
Definition: resource.h:67
#define IDC_RADIO_HEX
Definition: resource.h:23
#define LOCAL_EXP_SIZE
Definition: calc.h:43
#define SIZEOF(_ar)
Definition: calc.h:97
GLdouble n
Definition: glext.h:7729
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define _tcschr
Definition: tchar.h:1406
#define STRSAFE_FILL_ON_FAILURE
Definition: ntstrsafe.h:33
#define StringCbPrintfEx
Definition: strsafe.h:600
#define StringCbPrintf
Definition: strsafe.h:544
BOOL sci_in
Definition: calc.h:185
TCHAR buffer[MAX_CALC_SIZE]
Definition: calc.h:175
signed int esp
Definition: calc.h:188
TCHAR * ptr
Definition: calc.h:177
DWORD base
Definition: calc.h:189
CHAR key
Definition: winmain.c:62
Definition: copy.c:22
#define _T(x)
Definition: vfdio.h:22
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
static void update_lcd_display(HWND hwnd)
Definition: winmain.c:489
static const key3code_t key2code[]
Definition: winmain.c:82
unsigned char BYTE
Definition: xxhash.c:193

Referenced by DlgMainProc().

◆ clean_stat_list()

static void clean_stat_list ( void  )
static

Definition at line 868 of file winmain.c.

869{
871
872 while (p != NULL) {
873 statistic_t *s = p;
874 p = (statistic_t *)(p->next);
875 rpn_free(&s->num);
876 free(s);
877 }
878 calc.stat = p;
879}
void rpn_free(calc_number_t *c)
Definition: fun_ieee.c:605
#define free
Definition: debug_ros.c:5
GLdouble s
Definition: gl.h:2039
GLfloat GLfloat p
Definition: glext.h:8902
statistic_t * stat
Definition: calc.h:181

Referenced by DlgStatProc().

◆ convert_text2number()

static void convert_text2number ( calc_number_t a)
static

Definition at line 688 of file winmain.c.

689{
690 /* if the screen output buffer is empty, then */
691 /* the operand is taken from the last input */
692 if (calc.buffer == calc.ptr) {
693 /* if pushed valued is ZERO then we should grab it */
694 if (!_tcscmp(calc.buffer, _T("0.")) ||
695 !_tcscmp(calc.buffer, _T("0")))
696 /* this zero is good for both integer and decimal */
697 rpn_zero(a);
698 else
699 rpn_copy(a, &calc.code);
700 return;
701 }
702 /* ZERO is the default value for all numeric bases */
703 rpn_zero(a);
705}
void convert_text2number_2(calc_number_t *a)
Definition: utl_ieee.c:86
void rpn_zero(calc_number_t *c)
Definition: fun_ieee.c:586
void rpn_copy(calc_number_t *dst, calc_number_t *src)
Definition: fun_ieee.c:591
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
#define _tcscmp
Definition: tchar.h:1424
calc_number_t code
Definition: calc.h:178

Referenced by DlgMainProc(), and update_radio().

◆ CopyMemToClipboard()

static void CopyMemToClipboard ( void ptr)
static

Definition at line 991 of file winmain.c.

992{
993 if(OpenClipboard(NULL)) {
994 HGLOBAL clipbuffer;
995 TCHAR *buffer;
996 size_t cbBuffer;
997
999 cbBuffer = (_tcslen(ptr) + 1) * sizeof(TCHAR);
1000 clipbuffer = GlobalAlloc(GMEM_DDESHARE, cbBuffer);
1001 buffer = (TCHAR *)GlobalLock(clipbuffer);
1002 StringCbCopy(buffer, cbBuffer, ptr);
1003 GlobalUnlock(clipbuffer);
1004#ifdef UNICODE
1005 SetClipboardData(CF_UNICODETEXT,clipbuffer);
1006#else
1007 SetClipboardData(CF_TEXT,clipbuffer);
1008#endif
1010 }
1011}
#define CF_UNICODETEXT
Definition: constants.h:408
#define CF_TEXT
Definition: constants.h:396
GLuint buffer
Definition: glext.h:5915
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
static PVOID ptr
Definition: dispmode.c:27
#define StringCbCopy
Definition: strsafe.h:155
#define GMEM_DDESHARE
Definition: winbase.h:324
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
BOOL WINAPI CloseClipboard(void)
Definition: ntwrapper.h:178
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
BOOL WINAPI EmptyClipboard(void)
Definition: ntwrapper.h:190
char TCHAR
Definition: xmlstorage.h:189
#define _tcslen
Definition: xmlstorage.h:198

Referenced by handle_copy_command().

◆ delete_stat_item()

static void delete_stat_item ( int  n)
static

Definition at line 881 of file winmain.c.

882{
884 statistic_t *s;
885
886 if (n == 0) {
887 calc.stat = (statistic_t *)p->next;
888 rpn_free(&p->num);
889 free(p);
890 } else {
891 s = (statistic_t *)p->next;
892 while (--n) {
893 p = s;
894 s = (statistic_t *)p->next;
895 }
896 p->next = s->next;
897 rpn_free(&s->num);
898 free(s);
899 }
900}
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
void * next
Definition: calc.h:157

Referenced by DlgStatProc().

◆ display_rpn_result()

static void display_rpn_result ( HWND  hwnd,
calc_number_t rpn 
)
static

Definition at line 670 of file winmain.c.

671{
672 set_rpn_result(hwnd, rpn);
674}
static void set_rpn_result(HWND hwnd, calc_number_t *rpn)
Definition: winmain.c:661

Referenced by DlgMainProc(), and update_radio().

◆ DlgMainProc()

static INT_PTR CALLBACK DlgMainProc ( HWND  hWnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1426 of file winmain.c.

1427{
1428 unsigned int x;
1429 RECT rc;
1430
1431 switch (msg) {
1432 case WM_DRAWITEM:
1433 return SubclassButtonProc(hWnd, wp, lp);
1434
1435 case WM_INITDIALOG:
1436#ifdef DISABLE_HTMLHELP_SUPPORT
1438#endif
1439 calc.hWnd=hWnd;
1440 /* Enumerate children and apply hover function */
1441 BtnCount = 0;
1443
1444#ifdef USE_KEYBOARD_HOOK
1445 calc.hKeyboardHook=SetWindowsHookEx(
1448 NULL,
1450 );
1451#endif
1452 rpn_zero(&calc.code);
1453 calc.sci_out = FALSE;
1457 calc.ptr = calc.buffer;
1458 calc.is_nan = FALSE;
1464 /* remove keyboard focus */
1466 /* set our calc icon */
1467 SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)calc.hBgIcon);
1468 SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)calc.hSmIcon);
1469 /* update text for decimal button */
1471 /* Fill combo box for conversion */
1473 ConvInit(hWnd);
1474 /* Restore the window at the same position it was */
1475 if (calc.x_coord >= 0 && calc.y_coord >= 0) {
1476 int w, h, sw, sh;
1477
1478 GetWindowRect(hWnd, &rc);
1479 w = rc.right-rc.left;
1480 h = rc.bottom-rc.top;
1483 if (calc.x_coord+w > sw) calc.x_coord = sw - w;
1484 if (calc.y_coord+h > sh) calc.y_coord = sh - h;
1486 }
1487 break;
1488 case WM_CTLCOLORSTATIC:
1489 if ((HWND)lp == GetDlgItem(hWnd, IDC_TEXT_OUTPUT))
1491 break;
1494 return TRUE;
1495 case WM_COMMAND:
1496 /*
1497 * if selection of category is changed, we must
1498 * update the content of the "from/to" combo boxes.
1499 */
1502 return TRUE;
1503 }
1504 if (HIWORD(wp) != BN_CLICKED && HIWORD(wp) != BN_DBLCLK)
1505 break;
1506 /* avoid flicker if the user selects from keyboard */
1509 switch (LOWORD(wp)) {
1510 case IDM_HELP_ABOUT:
1511 {
1512 TCHAR infotitle[100];
1513 TCHAR infotext[200];
1514 LoadString(calc.hInstance, IDS_CALC_NAME, infotitle, SIZEOF(infotitle));
1515 LoadString(calc.hInstance, IDS_AUTHOR, infotext, SIZEOF(infotext));
1516 ShellAbout(hWnd, infotitle, infotext, calc.hBgIcon);
1517 return TRUE;
1518 }
1519 case IDM_HELP_HELP:
1520#ifndef DISABLE_HTMLHELP_SUPPORT
1521 calc_HtmlHelp(hWnd, HTMLHELP_PATH("/general_information.htm"), HH_DISPLAY_TOPIC, (DWORD_PTR)NULL);
1522#endif
1523 return TRUE;
1524 case IDM_VIEW_STANDARD:
1528 return TRUE;
1533 return TRUE;
1538 return TRUE;
1539 case IDM_VIEW_HEX:
1540 case IDM_VIEW_DEC:
1541 case IDM_VIEW_OCT:
1542 case IDM_VIEW_BIN:
1543 case IDM_VIEW_DEG:
1544 case IDM_VIEW_RAD:
1545 case IDM_VIEW_GRAD:
1546 case IDM_VIEW_QWORD:
1547 case IDM_VIEW_DWORD:
1548 case IDM_VIEW_WORD:
1549 case IDM_VIEW_BYTE:
1551 return TRUE;
1552 case IDM_EDIT_COPY:
1554 return TRUE;
1555 case IDM_EDIT_PASTE:
1556 if (calc.Clipboard.data != NULL)
1557 break;
1559 if (calc.Clipboard.data != NULL) {
1560 /* clear the content of the display before pasting */
1565 }
1566 return TRUE;
1567 case IDM_VIEW_GROUP:
1568 calc.usesep = (calc.usesep ? FALSE : TRUE);
1571 return TRUE;
1572 case IDC_BUTTON_CONVERT:
1574 return TRUE;
1575 case IDC_BUTTON_CE: {
1576 calc_number_t tmp;
1577 rpn_zero(&tmp);
1578 display_rpn_result(hWnd, &tmp);
1579 }
1580 return TRUE;
1581 case IDC_RADIO_DEC:
1582 case IDC_RADIO_HEX:
1583 case IDC_RADIO_OCT:
1584 case IDC_RADIO_BIN:
1585/* GNU WINDRES is bugged so I must always force radio update */
1586/* (Fix for Win95/98) */
1587#ifdef _MSC_VER
1588 if (calc.base == LOWORD(wp))
1589 break;
1590#endif
1591 calc.is_nan = FALSE;
1592 update_radio(hWnd, LOWORD(wp));
1593 return TRUE;
1594 case IDC_RADIO_DEG:
1595 case IDC_RADIO_RAD:
1596 case IDC_RADIO_GRAD:
1597/* GNU WINDRES is bugged so I must always force radio update */
1598/* (Fix for Win95/98) */
1599#ifdef _MSC_VER
1600 if (calc.degr == LOWORD(wp))
1601 break;
1602#endif
1603 calc.degr = LOWORD(wp);
1604 calc.is_nan = FALSE;
1606 return TRUE;
1607 case IDC_RADIO_QWORD:
1608 case IDC_RADIO_DWORD:
1609 case IDC_RADIO_WORD:
1610 case IDC_RADIO_BYTE:
1611/* GNU WINDRES is bugged so I must always force radio update */
1612/* (Fix for Win95/98) */
1613#ifdef _MSC_VER
1614 if (calc.size == LOWORD(wp))
1615 break;
1616#endif
1617 calc.size = LOWORD(wp);
1618 calc.is_nan = FALSE;
1620 /*
1621 * update the content of the display
1622 */
1626 return TRUE;
1627 case IDC_BUTTON_1:
1628 case IDC_BUTTON_2:
1629 case IDC_BUTTON_3:
1630 case IDC_BUTTON_4:
1631 case IDC_BUTTON_5:
1632 case IDC_BUTTON_6:
1633 case IDC_BUTTON_7:
1634 case IDC_BUTTON_8:
1635 case IDC_BUTTON_9:
1636 case IDC_BUTTON_0:
1637 case IDC_BUTTON_DOT:
1638 case IDC_BUTTON_A:
1639 case IDC_BUTTON_B:
1640 case IDC_BUTTON_C:
1641 case IDC_BUTTON_D:
1642 case IDC_BUTTON_E:
1643 case IDC_BUTTON_F:
1644 if (calc.is_nan) break;
1646 return TRUE;
1647 case IDC_BUTTON_PERCENT:
1648 case IDC_BUTTON_ADD:
1649 case IDC_BUTTON_SUB:
1650 case IDC_BUTTON_MULT:
1651 case IDC_BUTTON_DIV:
1652 case IDC_BUTTON_MOD:
1653 case IDC_BUTTON_AND:
1654 case IDC_BUTTON_OR:
1655 case IDC_BUTTON_XOR:
1656 case IDC_BUTTON_LSH:
1657 case IDC_BUTTON_RSH:
1658 case IDC_BUTTON_EQU:
1659 case IDC_BUTTON_XeY:
1660 case IDC_BUTTON_XrY:
1661 if (calc.is_nan) break;
1662 /*
1663 * LSH and XeY buttons hold also the RSH and XrY functions with INV modifier,
1664 * but since they are two operand operators, they must be handled here.
1665 */
1667 {
1668 WPARAM IdcSim = IDC_STATIC;
1669
1670 switch (LOWORD(wp)) {
1671 case IDC_BUTTON_LSH: IdcSim = MAKEWPARAM(IDC_BUTTON_RSH, BN_CLICKED); break;
1672 case IDC_BUTTON_XeY: IdcSim = MAKEWPARAM(IDC_BUTTON_XrY, BN_CLICKED); break;
1673 }
1674
1675 if (IdcSim != IDC_STATIC)
1676 {
1677 PostMessage(hWnd, WM_COMMAND, IdcSim, 0);
1679 break;
1680 }
1681 }
1682
1683 for (x=0; x<SIZEOF(operator_codes); x++) {
1684 if (LOWORD(wp) == operator_codes[x]) {
1686
1687 if (calc.ptr == calc.buffer) {
1688 if (calc.last_operator != x) {
1689 if (x != RPN_OPERATOR_EQUAL)
1691 } else
1692 if (x == RPN_OPERATOR_EQUAL) {
1695 } else
1696 break;
1697 }
1698
1699 /* if no change then quit silently, */
1700 /* without display updates */
1701 if (!exec_infix2postfix(&calc.code, x))
1702 break;
1703
1705 break;
1706 }
1707 }
1708 return TRUE;
1709 case IDC_BUTTON_BACK:
1710 if (calc.is_nan) break;
1711 if (calc.sci_in) {
1712 if (calc.esp == 0) {
1713 TCHAR *ptr;
1714
1715 calc.sci_in = FALSE;
1716 ptr = _tcschr(calc.ptr, _T('e'));
1717 if (ptr)
1718 *ptr = _T('\0');
1720 } else {
1721 calc.esp /= 10;
1723 }
1724 } else
1725 if (calc.ptr != calc.buffer) {
1726 *--calc.ptr = _T('\0');
1727 if (!_tcscmp(calc.buffer, _T("-")) ||
1728 !_tcscmp(calc.buffer, _T("-0")) ||
1729 !_tcscmp(calc.buffer, _T("0"))) {
1730 calc.ptr = calc.buffer;
1731 calc.buffer[0] = _T('\0');
1732 }
1734 }
1735 return TRUE;
1736 case IDC_BUTTON_MC:
1739 return TRUE;
1740 case IDC_BUTTON_MR:
1741 if (calc.is_memory) {
1742 calc.is_nan = FALSE;
1745 }
1746 return TRUE;
1747 case IDC_BUTTON_EXP:
1748 if (calc.sci_in || calc.is_nan || calc.buffer == calc.ptr)
1749 break;
1750 calc.sci_in = TRUE;
1751 calc.esp = 0;
1753 return TRUE;
1754 case IDC_BUTTON_SIGN:
1755 if (calc.sci_in) {
1756 calc.esp = 0-calc.esp;
1758 } else {
1759 if (calc.is_nan || calc.buffer[0] == _T('\0'))
1760 break;
1761
1762 if (calc.buffer[0] == _T('-')) {
1763 /* make the number positive */
1764 memmove(calc.buffer, calc.buffer+1, sizeof(calc.buffer)-1);
1765 if (calc.buffer != calc.ptr)
1766 calc.ptr--;
1767 } else {
1768 /* if first char is '0' and no dot, it isn't valid */
1769 if (calc.buffer[0] == _T('0') &&
1770 calc.buffer[1] != _T('.'))
1771 break;
1772 /* make the number negative */
1773 memmove(calc.buffer+1, calc.buffer, sizeof(calc.buffer)-1);
1774 calc.buffer[0] = _T('-');
1775 if (calc.buffer != calc.ptr)
1776 calc.ptr++;
1777 }
1778 /* If the input buffer is empty, then
1779 we change also the sign of calc.code
1780 because it could be the result of a
1781 previous calculation. */
1782 if (calc.buffer == calc.ptr)
1783 rpn_sign(&calc.code);
1785 }
1786 return TRUE;
1788 case IDC_BUTTON_LEFTPAR:
1789 case IDC_BUTTON_CANC:
1790 case IDC_BUTTON_MP:
1791 case IDC_BUTTON_DAT:
1792 case IDC_BUTTON_FE:
1793 case IDC_BUTTON_DMS:
1794 case IDC_BUTTON_SQRT:
1795 case IDC_BUTTON_S:
1796 case IDC_BUTTON_SUM:
1797 case IDC_BUTTON_AVE:
1798 case IDC_BUTTON_NF:
1799 case IDC_BUTTON_LN:
1800 case IDC_BUTTON_LOG:
1801 case IDC_BUTTON_Xe2:
1802 case IDC_BUTTON_Xe3:
1803 case IDC_BUTTON_PI:
1804 case IDC_BUTTON_NOT:
1805 case IDC_BUTTON_RX:
1806 case IDC_BUTTON_INT:
1807 case IDC_BUTTON_SIN:
1808 case IDC_BUTTON_COS:
1809 case IDC_BUTTON_TAN:
1810 case IDC_BUTTON_MS:
1811 for (x=0; x<SIZEOF(function_table); x++) {
1812 if (LOWORD(wp) == function_table[x].idc) {
1814
1815 /* test if NaN state is important or not */
1816 if (calc.is_nan && function_table[x].check_nan) break;
1817 /* otherwise, it's cleared */
1818 calc.is_nan = FALSE;
1819
1820 switch (get_modifiers(hWnd) & function_table[x].range) {
1821 case 0:
1823 break;
1824 case MODIFIER_INV:
1826 break;
1827 case MODIFIER_HYP:
1829 break;
1832 break;
1833 }
1834 if (cb != NULL) {
1836 cb(&calc.code);
1837// display_rpn_result(hWnd, &calc.code);
1839
1840 if ((function_table[x].range & NO_CHAIN))
1841 calc.ptr = calc.buffer;
1842
1843// if (!(function_table[x].range & NO_CHAIN))
1844// exec_infix2postfix(&calc.code, RPN_OPERATOR_NONE);
1849 }
1850 break;
1851 }
1852 }
1853 return TRUE;
1854 case IDC_BUTTON_STA:
1855 if (IsWindow(calc.hStatWnd))
1856 break;
1859 if (calc.hStatWnd != NULL) {
1862 }
1863 return TRUE;
1864 }
1865 break;
1866 case WM_CLOSE_STATS:
1867 calc.hStatWnd = NULL;
1869 return TRUE;
1870 case WM_LOAD_STAT:
1871 if (upload_stat_number((int)LOWORD(wp)) != NULL)
1873 return TRUE;
1874 case WM_START_CONV:
1875 x = LOWORD(lp);
1877 if (calc.Convert[x].data != NULL) {
1879 PostMessage(hWnd, HIWORD(lp), 0, 0);
1880 }
1881 return TRUE;
1882 case WM_HANDLE_FROM:
1883 if (calc.is_nan)
1884 break;
1887 MAKELPARAM(0x0001, WM_HANDLE_TO));
1888 return TRUE;
1889 case WM_HANDLE_TO:
1890 if (!calc.is_nan)
1892 return TRUE;
1893 case WM_CLOSE:
1896 return TRUE;
1897
1898 case WM_DESTROY:
1899 /* Get (x,y) position of the calculator */
1900 GetWindowRect(hWnd, &rc);
1901 calc.x_coord = rc.left;
1902 calc.y_coord = rc.top;
1903#ifdef USE_KEYBOARD_HOOK
1904 UnhookWindowsHookEx(calc.hKeyboardHook);
1905#endif
1906 PostQuitMessage(0);
1907 return TRUE;
1908 case WM_CONTEXTMENU:
1909 if ((HWND)wp != hWnd)
1910 handle_context_menu(hWnd, wp, lp);
1911 return TRUE;
1912 case WM_ENTERMENULOOP:
1914 /* Check if a valid format is available in the clipboard */
1920 break;
1921 case WM_EXITMENULOOP:
1923 break;
1924
1925 case WM_SETTINGCHANGE:
1926 return OnSettingChange(hWnd, wp, lp);
1927
1928 case WM_THEMECHANGED:
1930 break;
1931 }
1932 return FALSE;
1933}
#define IDC_BUTTON_TAN
Definition: resource.h:38
#define IDM_VIEW_CONVERSION
Definition: resource.h:392
#define IDC_RADIO_DWORD
Definition: resource.h:85
#define IDM_VIEW_DEG
Definition: resource.h:382
#define IDC_BUTTON_B
Definition: resource.h:63
#define IDC_BUTTON_MS
Definition: resource.h:51
#define IDM_VIEW_STANDARD
Definition: resource.h:376
#define IDD_DIALOG_STAT
Definition: resource.h:16
#define IDC_BUTTON_DMS
Definition: resource.h:35
#define IDC_RADIO_QWORD
Definition: resource.h:84
#define IDC_BUTTON_BACK
Definition: resource.h:93
#define IDC_BUTTON_A
Definition: resource.h:58
#define IDC_BUTTON_ADD
Definition: resource.h:72
#define IDC_BUTTON_PI
Definition: resource.h:53
#define IDC_BUTTON_LN
Definition: resource.h:45
#define IDC_BUTTON_DAT
Definition: resource.h:33
#define IDC_BUTTON_STA
Definition: resource.h:29
#define IDC_BUTTON_MC
Definition: resource.h:49
#define IDC_BUTTON_XeY
Definition: resource.h:41
#define IDM_VIEW_RAD
Definition: resource.h:383
#define IDC_BUTTON_3
Definition: resource.h:66
#define IDM_EDIT_PASTE
Definition: resource.h:375
#define IDC_CHECK_INV
Definition: resource.h:27
#define IDC_BUTTON_FOCUS
Definition: resource.h:108
#define IDC_BUTTON_RSH
Definition: resource.h:112
#define IDM_VIEW_WORD
Definition: resource.h:389
#define IDC_BUTTON_LOG
Definition: resource.h:46
#define IDM_VIEW_BYTE
Definition: resource.h:390
#define IDS_CALC_NAME
Definition: resource.h:9
#define IDC_BUTTON_INT
Definition: resource.h:82
#define IDC_BUTTON_D
Definition: resource.h:73
#define IDC_BUTTON_S
Definition: resource.h:32
#define IDC_CHECK_HYP
Definition: resource.h:28
#define IDC_BUTTON_OR
Definition: resource.h:75
#define IDC_BUTTON_SUB
Definition: resource.h:71
#define IDM_VIEW_DWORD
Definition: resource.h:391
#define IDC_BUTTON_NOT
Definition: resource.h:81
#define IDC_BUTTON_RIGHTPAR
Definition: resource.h:44
#define IDC_RADIO_WORD
Definition: resource.h:86
#define IDM_VIEW_QWORD
Definition: resource.h:388
#define IDC_RADIO_GRAD
Definition: resource.h:90
#define IDC_BUTTON_NF
Definition: resource.h:47
#define IDM_VIEW_BIN
Definition: resource.h:381
#define IDC_BUTTON_CE
Definition: resource.h:92
#define IDC_RADIO_DEG
Definition: resource.h:88
#define IDC_RADIO_RAD
Definition: resource.h:89
#define IDC_BUTTON_EQU
Definition: resource.h:77
#define IDM_VIEW_OCT
Definition: resource.h:380
#define IDC_COMBO_CATEGORY
Definition: resource.h:109
#define IDC_BUTTON_E
Definition: resource.h:78
#define IDC_BUTTON_2
Definition: resource.h:61
#define IDC_BUTTON_8
Definition: resource.h:59
#define IDC_BUTTON_XOR
Definition: resource.h:80
#define IDM_EDIT_COPY
Definition: resource.h:374
#define IDC_BUTTON_DIV
Definition: resource.h:69
#define IDC_BUTTON_MOD
Definition: resource.h:74
#define IDC_BUTTON_Xe2
Definition: resource.h:42
#define IDC_TEXT_OUTPUT
Definition: resource.h:94
#define IDC_BUTTON_LSH
Definition: resource.h:76
#define IDM_VIEW_GROUP
Definition: resource.h:385
#define IDC_BUTTON_FE
Definition: resource.h:34
#define IDC_BUTTON_6
Definition: resource.h:65
#define IDC_BUTTON_SIN
Definition: resource.h:36
#define IDC_BUTTON_AVE
Definition: resource.h:30
#define IDC_BUTTON_COS
Definition: resource.h:37
#define IDC_BUTTON_PERCENT
Definition: resource.h:105
#define IDC_BUTTON_9
Definition: resource.h:64
#define IDM_VIEW_GRAD
Definition: resource.h:384
#define IDC_BUTTON_MULT
Definition: resource.h:70
#define IDM_VIEW_DEC
Definition: resource.h:379
#define IDM_VIEW_SCIENTIFIC
Definition: resource.h:377
#define IDC_BUTTON_C
Definition: resource.h:68
#define IDC_BUTTON_SIGN
Definition: resource.h:62
#define IDC_BUTTON_CANC
Definition: resource.h:91
#define IDM_HELP_HELP
Definition: resource.h:386
#define IDC_BUTTON_MR
Definition: resource.h:50
#define IDC_BUTTON_MP
Definition: resource.h:52
#define IDC_RADIO_BYTE
Definition: resource.h:87
#define IDM_VIEW_HEX
Definition: resource.h:378
#define IDC_BUTTON_AND
Definition: resource.h:79
#define IDC_BUTTON_F
Definition: resource.h:83
#define IDC_BUTTON_LEFTPAR
Definition: resource.h:39
#define IDC_BUTTON_SQRT
Definition: resource.h:104
#define IDC_BUTTON_RX
Definition: resource.h:48
#define IDC_BUTTON_Xe3
Definition: resource.h:43
#define IDM_HELP_ABOUT
Definition: resource.h:387
#define IDC_BUTTON_EXP
Definition: resource.h:40
#define IDC_BUTTON_CONVERT
Definition: resource.h:106
#define IDC_BUTTON_5
Definition: resource.h:60
#define IDC_BUTTON_7
Definition: resource.h:54
#define IDS_AUTHOR
Definition: resource.h:12
#define IDC_BUTTON_4
Definition: resource.h:55
#define IDC_BUTTON_SUM
Definition: resource.h:31
#define IDC_BUTTON_1
Definition: resource.h:56
#define IDC_BUTTON_XrY
Definition: resource.h:113
HWND hWnd
Definition: settings.c:17
@ RPN_OPERATOR_EQUAL
Definition: calc.h:104
#define NO_CHAIN
Definition: calc.h:218
#define MODIFIER_INV
Definition: calc.h:216
void apply_int_mask(calc_number_t *a)
Definition: fun_ieee.c:26
void ConvExecute(HWND hWnd)
Definition: convert.c:568
#define WM_HANDLE_FROM
Definition: calc.h:29
#define WM_LOAD_STAT
Definition: calc.h:27
void ConvInit(HWND hWnd)
Definition: convert.c:650
void exec_change_infix(void)
Definition: rpn_ieee.c:422
void rpn_sign(calc_number_t *c)
Definition: fun_ieee.c:300
void ConvAdjust(HWND hWnd, int n_cat)
Definition: convert.c:621
#define WM_START_CONV
Definition: calc.h:28
#define calc_HtmlHelp
Definition: calc.h:59
int exec_infix2postfix(calc_number_t *, unsigned int)
Definition: rpn_ieee.c:391
#define MODIFIER_HYP
Definition: calc.h:217
#define WM_HANDLE_TO
Definition: calc.h:30
@ CALC_LAYOUT_STANDARD
Definition: calc.h:162
#define WM_HANDLE_CLIPBOARD
Definition: calc.h:25
#define WM_CLOSE_STATS
Definition: calc.h:24
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLenum GLint * range
Definition: glext.h:7539
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define HH_DISPLAY_TOPIC
Definition: htmlhelp.h:22
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
static LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
Definition: msg.c:16658
#define LOWORD(l)
Definition: pedump.c:82
#define WM_CONTEXTMENU
Definition: richedit.h:64
short sh
Definition: format.c:272
#define ShellAbout
Definition: shellapi.h:693
calc_number_t number
Definition: calc.h:133
HWND hWnd
Definition: calc.h:171
DWORD degr
Definition: calc.h:191
sequence_t Convert[2]
Definition: calc.h:196
calc_node_t memory
Definition: calc.h:180
unsigned int prev_operator
Definition: calc.h:198
unsigned int last_operator
Definition: calc.h:197
BOOL is_nan
Definition: calc.h:183
BOOL usesep
Definition: calc.h:186
calc_number_t prev
Definition: calc.h:179
TCHAR sDecimal[8]
Definition: calc.h:199
sequence_t Clipboard
Definition: calc.h:195
HWND hStatWnd
Definition: calc.h:193
BOOL sci_out
Definition: calc.h:184
DWORD size
Definition: calc.h:190
BOOL is_memory
Definition: calc.h:182
rpn_callback1 direct
Definition: winmain.c:193
rpn_callback1 inverse
Definition: winmain.c:194
rpn_callback1 inv_hyp
Definition: winmain.c:196
rpn_callback1 hyperb
Definition: winmain.c:195
char * data
Definition: calc.h:149
char * ptr
Definition: calc.h:150
UINT wm_msg
Definition: calc.h:151
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define HIWORD(l)
Definition: typedefs.h:247
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define WHITE_BRUSH
Definition: wingdi.h:902
static int get_modifiers(HWND hWnd)
Definition: winmain.c:676
static const WORD operator_codes[]
Definition: winmain.c:168
static void update_radio(HWND hwnd, unsigned int base)
Definition: winmain.c:800
static void convert_text2number(calc_number_t *a)
Definition: winmain.c:688
static void update_menu(HWND hWnd)
Definition: winmain.c:731
static void handle_copy_command(HWND hWnd)
Definition: winmain.c:1013
static void build_operand(HWND hwnd, DWORD idc)
Definition: winmain.c:580
static char * ReadConversion(const char *formula)
Definition: winmain.c:902
static WPARAM idm_2_idc(int idm)
Definition: winmain.c:980
void(* rpn_callback1)(calc_number_t *)
Definition: winmain.c:187
static INT_PTR CALLBACK OnSettingChange(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: winmain.c:1403
static void update_memory_flag(HWND hWnd, BOOL mem_flag)
Definition: winmain.c:854
static INT_PTR CALLBACK DlgStatProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: winmain.c:924
static void enable_allowed_controls(HWND hwnd, DWORD base)
Definition: winmain.c:764
static char * handle_sequence_input(HWND hwnd, sequence_t *seq)
Definition: winmain.c:1051
static BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
Definition: winmain.c:1380
static char * ReadClipboard(void)
Definition: winmain.c:1032
#define HTMLHELP_PATH(_pt)
Definition: winmain.c:23
static const function_table_t function_table[]
Definition: winmain.c:209
static void handle_context_menu(HWND hWnd, WPARAM wp, LPARAM lp)
Definition: winmain.c:1192
static void display_rpn_result(HWND hwnd, calc_number_t *rpn)
Definition: winmain.c:670
UINT BtnCount
Definition: winmain.c:251
static statistic_t * upload_stat_number(int n)
Definition: winmain.c:1157
static LRESULT CALLBACK SubclassButtonProc(HWND hWnd, WPARAM wp, LPARAM lp)
Definition: winmain.c:1254
HWND WINAPI GetFocus(void)
Definition: window.c:1865
#define WH_KEYBOARD
Definition: winuser.h:32
#define MAKEWPARAM(l, h)
Definition: winuser.h:4012
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1775
#define WM_CLOSE
Definition: winuser.h:1624
#define MF_BYCOMMAND
Definition: winuser.h:202
#define BN_DBLCLK
Definition: winuser.h:1929
#define MAKELPARAM(l, h)
Definition: winuser.h:4011
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
#define SM_CYSCREEN
Definition: winuser.h:963
#define BST_UNCHECKED
Definition: winuser.h:199
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_SETFOCUS
Definition: winuser.h:1616
#define WM_INITDIALOG
Definition: winuser.h:1742
#define SetWindowsHookEx
Definition: winuser.h:5868
BOOL WINAPI EnumChildWindows(_In_opt_ HWND, _In_ WNDENUMPROC, _In_ LPARAM)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define WM_DRAWITEM
Definition: winuser.h:1648
#define CBN_SELCHANGE
Definition: winuser.h:1982
#define WM_SETTINGCHANGE
Definition: winuser.h:1632
#define WM_ENTERMENULOOP
Definition: winuser.h:1807
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
HWND WINAPI SetFocus(_In_opt_ HWND)
#define MF_ENABLED
Definition: winuser.h:128
BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK)
#define SendMessage
Definition: winuser.h:5855
#define WM_EXITMENULOOP
Definition: winuser.h:1808
#define PostMessage
Definition: winuser.h:5844
#define LoadString
Definition: winuser.h:5831
#define BN_CLICKED
Definition: winuser.h:1928
#define WM_DESTROY
Definition: winuser.h:1612
#define SM_CXSCREEN
Definition: winuser.h:962
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define CB_GETCURSEL
Definition: winuser.h:1946
#define SendDlgItemMessage
Definition: winuser.h:5854
BOOL WINAPI DestroyWindow(_In_ HWND)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define SetDlgItemText
Definition: winuser.h:5861
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
BOOL WINAPI IsClipboardFormatAvailable(_In_ UINT)
HMENU WINAPI GetMenu(_In_ HWND)
#define MF_GRAYED
Definition: winuser.h:129

Referenced by _tWinMain().

◆ DlgStatProc()

static INT_PTR CALLBACK DlgStatProc ( HWND  hWnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 924 of file winmain.c.

925{
927 DWORD n;
928
929 switch (msg) {
930 case WM_INITDIALOG:
931 return TRUE;
932 case WM_COMMAND:
933 switch (LOWORD(wp)) {
934 case IDC_LIST_STAT:
935 if (HIWORD(wp) == CBN_DBLCLK)
937 return TRUE;
938 case IDC_BUTTON_RET:
940 return TRUE;
941 case IDC_BUTTON_LOAD:
943 if (n == LB_ERR)
944 return TRUE;
946 return TRUE;
947 case IDC_BUTTON_CD:
949 if (n == LB_ERR)
950 return TRUE;
954 return TRUE;
955 case IDC_BUTTON_CAD:
959 return TRUE;
960 }
961 break;
962 case WM_CLOSE:
964 return TRUE;
965 case WM_DESTROY:
968 return TRUE;
969 case WM_INSERT_STAT:
972 ((statistic_t *)lp)->base);
975 return TRUE;
976 }
977 return FALSE;
978}
#define IDC_BUTTON_CAD
Definition: resource.h:102
#define IDC_BUTTON_CD
Definition: resource.h:101
#define IDC_BUTTON_RET
Definition: resource.h:99
#define IDC_LIST_STAT
Definition: resource.h:98
#define IDC_BUTTON_LOAD
Definition: resource.h:100
#define WM_INSERT_STAT
Definition: calc.h:26
GLuint GLuint num
Definition: glext.h:9618
static void prepare_rpn_result(calc_number_t *rpn, TCHAR *buffer, int size, int base)
Definition: winmain.c:651
static void update_n_stats_items(HWND hWnd, TCHAR *buffer, size_t cbBuffer)
Definition: winmain.c:860
static void delete_stat_item(int n)
Definition: winmain.c:881
static void clean_stat_list(void)
Definition: winmain.c:868
#define LB_ERR
Definition: winuser.h:2435
#define LB_ADDSTRING
Definition: winuser.h:2034
#define LB_RESETCONTENT
Definition: winuser.h:2058
#define LB_DELETESTRING
Definition: winuser.h:2035
HWND WINAPI GetParent(_In_ HWND)
#define CBN_DBLCLK
Definition: winuser.h:1976
#define LB_GETCURSEL
Definition: winuser.h:2042

Referenced by DlgMainProc().

◆ enable_allowed_controls()

static void enable_allowed_controls ( HWND  hwnd,
DWORD  base 
)
static

Definition at line 764 of file winmain.c.

765{
766 BYTE mask;
767 int n;
768
769 switch (base) {
770 case IDC_RADIO_DEC:
772 break;
773 case IDC_RADIO_HEX:
775 break;
776 case IDC_RADIO_OCT:
778 break;
779 case IDC_RADIO_BIN:
781 break;
782 default:
783 return;
784 }
785 for (n=0; n<SIZEOF(key2code); n++) {
786 if (key2code[n].mask != 0) {
787 HWND hCtlWnd = GetDlgItem(hwnd, key2code[n].idc);
789
792 else
793 current = (key2code[n].mask & mask) ? TRUE : FALSE;
794 if (IsWindowEnabled(hCtlWnd) != current)
795 EnableWindow(hCtlWnd, current);
796 }
797 }
798}
unsigned int BOOL
Definition: ntddk_ex.h:94
GLenum GLint GLuint mask
Definition: glext.h:6028
struct task_struct * current
Definition: linux.c:32
BYTE mask
Definition: winmain.c:63
#define BITMASK_IS_STATS
Definition: winmain.c:44
#define BITMASK_OCT_MASK
Definition: winmain.c:48
#define BITMASK_DEC_MASK
Definition: winmain.c:47
#define BITMASK_BIN_MASK
Definition: winmain.c:49
#define BITMASK_HEX_MASK
Definition: winmain.c:46
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
BOOL WINAPI IsWindowEnabled(_In_ HWND)

Referenced by DlgMainProc(), and update_radio().

◆ EnumChildProc()

static BOOL CALLBACK EnumChildProc ( HWND  hWnd,
LPARAM  lParam 
)
static

Definition at line 1380 of file winmain.c.

1381{
1382 TCHAR szClass[64];
1383
1384 if (!GetClassName(hWnd, szClass, SIZEOF(szClass)))
1385 return TRUE;
1386
1387 if (!_tcscmp(szClass, WC_BUTTON))
1388 {
1389 int *pnCtrls = (int *)lParam;
1390 int nCtrls = *pnCtrls;
1391
1393 BtnInfo[nCtrls].bHover = FALSE;
1394
1397
1398 *pnCtrls = ++nCtrls;
1399 }
1400 return TRUE;
1401}
LPARAM lParam
Definition: combotst.c:139
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define WC_BUTTON
Definition: commctrl.h:4630
WNDPROC oldProc
Definition: winmain.c:239
BOOL bHover
Definition: winmain.c:238
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
BTNINFO BtnInfo[255]
Definition: winmain.c:250
static INT_PTR CALLBACK HotButtonProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: winmain.c:1348
#define GetClassName
Definition: winuser.h:5795
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2909

Referenced by DlgMainProc().

◆ get_modifiers()

static int get_modifiers ( HWND  hWnd)
static

Definition at line 676 of file winmain.c.

677{
678 int modifiers = 0;
679
681 modifiers |= MODIFIER_INV;
683 modifiers |= MODIFIER_HYP;
684
685 return modifiers;
686}
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
#define BST_CHECKED
Definition: winuser.h:197

Referenced by DlgMainProc().

◆ handle_context_menu()

static void handle_context_menu ( HWND  hWnd,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1192 of file winmain.c.

1193{
1194 TCHAR text[64];
1195 HMENU hMenu = CreatePopupMenu();
1196 BOOL idm;
1197
1200 idm = TrackPopupMenu( hMenu,
1202 LOWORD(lp),
1203 HIWORD(lp),
1204 0,
1205 hWnd,
1206 NULL);
1207 DestroyMenu(hMenu);
1208#ifndef DISABLE_HTMLHELP_SUPPORT
1209 if (idm) {
1210 HH_POPUP popup;
1211
1212 memset(&popup, 0, sizeof(popup));
1213 popup.cbStruct = sizeof(HH_POPUP);
1214 popup.clrForeground = 1;
1215 popup.clrBackground = -1;
1216 popup.pt.x = LOWORD(lp);
1217 popup.pt.y = HIWORD(lp);
1218 popup.rcMargins.top = -1;
1219 popup.rcMargins.bottom = -1;
1220 popup.rcMargins.left = -1;
1221 popup.rcMargins.right = -1;
1222 popup.idString = GetWindowLongPtr((HWND)wp, GWL_ID);
1223 calc_HtmlHelp((HWND)wp, HTMLHELP_PATH("/popups.txt"), HH_DISPLAY_TEXT_POPUP, (DWORD_PTR)&popup);
1224 }
1225#else
1226 (void)idm;
1227#endif
1228}
#define IDS_QUICKHELP
Definition: resource.h:11
const WCHAR * text
Definition: package.c:1794
#define HH_DISPLAY_TEXT_POPUP
Definition: htmlhelp.h:37
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define memset(x, y, z)
Definition: compat.h:39
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define AppendMenu
Definition: winuser.h:5743
#define TPM_RIGHTBUTTON
Definition: winuser.h:2383
#define GWL_ID
Definition: winuser.h:862
#define MF_STRING
Definition: winuser.h:138
#define TPM_TOPALIGN
Definition: winuser.h:2386
#define TPM_LEFTALIGN
Definition: winuser.h:2380
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2390

Referenced by DlgMainProc().

◆ handle_copy_command()

static void handle_copy_command ( HWND  hWnd)
static

Definition at line 1013 of file winmain.c.

1014{
1016 UINT n;
1017
1018 // Read current text from output display
1020
1021 // Check if result is a true number
1022 if (!calc.is_nan)
1023 {
1024 // Remove trailing decimal point if no decimal digits exist
1025 if (calc.base == IDC_RADIO_DEC && _tcschr(calc.buffer, _T('.')) == NULL)
1026 display[n - calc.sDecimal_len] = _T('\0');
1027 }
1028
1030}
#define MAX_CALC_SIZE
Definition: calc.h:49
unsigned int UINT
Definition: ndis.h:50
unsigned int sDecimal_len
Definition: calc.h:201
static void CopyMemToClipboard(void *ptr)
Definition: winmain.c:991
#define GetDlgItemText
Definition: winuser.h:5797
int * display
Definition: x11stubs.c:12

Referenced by DlgMainProc().

◆ handle_sequence_input()

static char * handle_sequence_input ( HWND  hwnd,
sequence_t seq 
)
static

Definition at line 1051 of file winmain.c.

1052{
1053 char *ptr = seq->ptr;
1054 int ch, x;
1055
1056 ch = *ptr++;
1057 if (ch == '\\')
1059 else
1060 if (ch == ':') {
1061 ch = *ptr;
1062 if (ch != '\0')
1063 ptr++;
1064 switch (ch) {
1065 case 'C': PostMessage(hwnd, WM_COMMAND, (WPARAM)IDC_BUTTON_MC, 0); break;
1066 case 'E': PostMessage(hwnd, WM_COMMAND, (WPARAM)IDC_BUTTON_EXP,0); break;
1067 case 'M': PostMessage(hwnd, WM_COMMAND, (WPARAM)IDC_BUTTON_MS, 0); break;
1068 case 'P': PostMessage(hwnd, WM_COMMAND, (WPARAM)IDC_BUTTON_MP, 0); break;
1069 case 'Q': PostMessage(hwnd, WM_COMMAND, (WPARAM)IDC_BUTTON_CANC, 0); break;
1070 case 'R': PostMessage(hwnd, WM_COMMAND, (WPARAM)IDC_BUTTON_MR, 0); break;
1071 }
1072 } else
1073 if (ch == '$') {
1076 } else {
1077 for (x=0; x<SIZEOF(key2code); x++) {
1078 if (!(key2code[x].mask & BITMASK_IS_ASCII) ||
1080 continue;
1081 if (key2code[x].key == ch) {
1083 break;
1084 }
1085 }
1086 }
1087
1088 if (*ptr != '\0')
1089 {
1090 seq->ptr = ptr;
1091 PostMessage(hwnd, seq->wm_msg, 0, 0);
1092 } else {
1093 free(seq->data);
1094 seq->data = seq->ptr = ptr = NULL;
1095 }
1096 return ptr;
1097}
#define StringCbCopyEx
Definition: strsafe.h:192
TCHAR source[MAX_CALC_SIZE]
Definition: calc.h:176
#define BITMASK_IS_CTRL
Definition: winmain.c:45
#define BITMASK_IS_ASCII
Definition: winmain.c:43

Referenced by DlgMainProc().

◆ HotButtonProc()

static INT_PTR CALLBACK HotButtonProc ( HWND  hWnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1348 of file winmain.c.

1349{
1352
1353 switch (msg) {
1354 case WM_MOUSEMOVE:
1355 mouse_event.cbSize = sizeof(TRACKMOUSEEVENT);
1356 mouse_event.dwFlags = TME_QUERY;
1358 {
1360 mouse_event.hwndTrack = hWnd;
1361 mouse_event.dwHoverTime = 1;
1363 }
1364 break;
1365
1366 case WM_MOUSEHOVER:
1367 lpBtnInfo->bHover = TRUE;
1369 break;
1370
1371 case WM_MOUSELEAVE:
1372 lpBtnInfo->bHover = FALSE;
1374 break;
1375 }
1376
1377 return CallWindowProc(lpBtnInfo->oldProc, hWnd, msg, wp, lp);
1378}
#define TME_LEAVE
Definition: commctrl.h:4986
#define WM_MOUSELEAVE
Definition: commctrl.h:4980
struct tagTRACKMOUSEEVENT TRACKMOUSEEVENT
#define WM_MOUSEHOVER
Definition: commctrl.h:4979
#define TME_QUERY
Definition: commctrl.h:4988
#define TME_HOVER
Definition: commctrl.h:4985
struct BTNINFO * LPBTNINFO
void WINAPI mouse_event(_In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ ULONG_PTR)
#define CallWindowProc
Definition: winuser.h:5747
#define WM_MOUSEMOVE
Definition: winuser.h:1778
BOOL WINAPI TrackMouseEvent(_Inout_ LPTRACKMOUSEEVENT)

Referenced by EnumChildProc().

◆ idm_2_idc()

static WPARAM idm_2_idc ( int  idm)
static

Definition at line 980 of file winmain.c.

981{
982 int x;
983
984 for (x=0; x<SIZEOF(upd); x++) {
985 if (upd[x].idm == idm)
986 break;
987 }
988 return (WPARAM)(upd[x].idc);
989}
static const struct _update_check_menus upd[]

Referenced by DlgMainProc().

◆ load_config()

static void load_config ( void  )
static

Definition at line 301 of file winmain.c.

302{
304
305 osvi.dwOSVersionInfoSize = sizeof(osvi);
307
308 switch (osvi.dwPlatformId) {
311 /* Try to load last selected layout */
312 calc.layout = GetProfileInt(_T("SciCalc"), _T("layout"), CALC_LAYOUT_STANDARD);
313
314 /* Try to load last selected formatting option */
315 calc.usesep = (GetProfileInt(_T("SciCalc"), _T("UseSep"), FALSE)) ? TRUE : FALSE;
316 break;
317
318 default: /* VER_PLATFORM_WIN32_NT */
319 /* Try to load last selected layout */
320 calc.layout = LoadRegInt(_T("SOFTWARE\\Microsoft\\Calc"), _T("layout"), CALC_LAYOUT_STANDARD);
321
322 /* Try to load last selected formatting option */
323 calc.usesep = (LoadRegInt(_T("SOFTWARE\\Microsoft\\Calc"), _T("UseSep"), FALSE)) ? TRUE : FALSE;
324 break;
325 }
326
327 /* memory is empty at startup */
329
330 /* Get locale info for numbers */
332}
#define VER_PLATFORM_WIN32_WINDOWS
Definition: rtltypes.h:237
#define VER_PLATFORM_WIN32s
Definition: rtltypes.h:236
ULONG dwPlatformId
Definition: rtltypes.h:241
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:237
OSVERSIONINFO osvi
Definition: ver.c:28
#define GetVersionEx
Definition: winbase.h:3877
#define GetProfileInt
Definition: winbase.h:3862
static void UpdateNumberIntl(void)
Definition: winmain.c:253
static int LoadRegInt(LPCTSTR lpszApp, LPCTSTR lpszKey, int iDefault)
Definition: winmain.c:267

Referenced by _tWinMain().

◆ LoadRegInt()

static int LoadRegInt ( LPCTSTR  lpszApp,
LPCTSTR  lpszKey,
int  iDefault 
)
static

Definition at line 267 of file winmain.c.

268{
269 HKEY hKey;
270 int iValue;
271 DWORD tmp;
272
274 {
275 /* Try to load integer value */
276 tmp = sizeof(int);
277
278 if (RegQueryValueEx(hKey, lpszKey, NULL, NULL, (LPBYTE)&iValue, &tmp) == ERROR_SUCCESS)
279 iDefault = iValue;
280
281 /* close the key */
283 }
284
285 return iDefault;
286}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
FxAutoRegKey hKey
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegOpenKeyEx
Definition: winreg.h:520
#define RegQueryValueEx
Definition: winreg.h:524

Referenced by load_config().

◆ OnSettingChange()

static INT_PTR CALLBACK OnSettingChange ( HWND  hWnd,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1403 of file winmain.c.

1404{
1405 /* Check for user policy and area string valid */
1406 if (wParam == 0 && lParam != 0)
1407 {
1408 LPTSTR lpArea = (LPTSTR)lParam;
1409
1410 /* Check if a parameter has been changed into the locale settings */
1411 if (!_tcsicmp(lpArea, _T("intl")))
1412 {
1413 /* Re-load locale parameters */
1415
1416 /* Update text for decimal button */
1418
1419 /* Update text into the output display */
1421 }
1422 }
1423 return 0;
1424}
WPARAM wParam
Definition: combotst.c:138
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define _tcsicmp
Definition: xmlstorage.h:205

Referenced by DlgMainProc().

◆ post_key_press()

static LRESULT post_key_press ( LPARAM  lParam,
WORD  idc 
)
static

Definition at line 357 of file winmain.c.

358{
359 HWND hCtlWnd = GetDlgItem(calc.hWnd,idc);
360 TCHAR ClassName[64];
361
362 /* check if the key is enabled! */
363 if (!IsWindowEnabled(hCtlWnd))
364 return 1;
365
366 if (!GetClassName(hCtlWnd, ClassName, SIZEOF(ClassName)))
367 return 1;
368
369 if (!_tcscmp(ClassName, WC_BUTTON)) {
370 DWORD dwStyle = GetWindowLongPtr(hCtlWnd, GWL_STYLE) & 0xF;
371
372 /* Set states for press/release, but only for push buttons */
373 if (dwStyle == BS_PUSHBUTTON || dwStyle == BS_DEFPUSHBUTTON || dwStyle == BS_OWNERDRAW) {
374 if (!(lParam & KEY_WAS_DOWN)) {
375 PostMessage(hCtlWnd, BM_SETSTATE, 1, 0);
376 } else
377 if ((lParam & KEY_IS_UP)) {
378 PostMessage(hCtlWnd, BM_SETSTATE, 0, 0);
379 PostMessage(hCtlWnd, BM_CLICK, 0, 0);
380 }
381 return 1;
382 }
383 }
384 /* default action: simple click event at key release */
385 if ((lParam & KEY_IS_UP)) {
386 PostMessage(hCtlWnd, BM_CLICK, 0, 0);
387 }
388 return 1;
389}
#define BS_OWNERDRAW
Definition: pedump.c:661
#define BS_PUSHBUTTON
Definition: pedump.c:651
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
#define KEY_WAS_DOWN
Definition: winmain.c:41
#define KEY_IS_UP
Definition: winmain.c:40
#define BM_SETSTATE
Definition: winuser.h:1926
#define BM_CLICK
Definition: winuser.h:1920
#define GWL_STYLE
Definition: winuser.h:855

Referenced by process_vk_key().

◆ prepare_rpn_result()

static void prepare_rpn_result ( calc_number_t rpn,
TCHAR buffer,
int  size,
int  base 
)
static

Definition at line 651 of file winmain.c.

652{
653 if (calc.is_nan) {
656 return;
657 }
659}
#define IDS_MATH_ERROR
Definition: resource.h:10
void prepare_rpn_result_2(calc_number_t *rpn, TCHAR *buffer, int size, int base)
Definition: utl_ieee.c:23
GLsizeiptr size
Definition: glext.h:5919

Referenced by DlgStatProc(), and set_rpn_result().

◆ process_vk_key()

static int process_vk_key ( WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 419 of file winmain.c.

420{
421 const key2code_t *k;
422 unsigned int x;
423 unsigned short int ch;
424
425 ch = vk2ascii(LOWORD(wParam));
426 if ((lParam & KEY_IS_UP)) {
427 /* Test for "copy" to clipboard */
428 if (ch == (CTRL_C|CTRL_FLAG)) {
430 return 1;
431 }
432 /* Test for "paste" from clipboard */
433 if (ch == (CTRL_V|CTRL_FLAG)) {
435 return 1;
436 }
437 /* Test of help menu */
438 if (LOWORD(wParam) == VK_F1) {
440 return 1;
441 }
442 }
443
444 for (x=0; x<SIZEOF(key2code); x++) {
445 int key = key2code[x].key;
447 key |= CTRL_FLAG;
448 if ((key == ch && (key2code[x].mask & BITMASK_IS_ASCII)) ||
450 ) {
452 continue;
453 return post_key_press(lParam, key2code[x].idc);
454 }
455 }
457 if (calc.base == IDC_RADIO_DEC) {
460 } else {
463 }
464 do {
465 if (k->key == LOWORD(wParam)) {
466 return post_key_press(lParam, k->idc);
467 }
468 k++;
469 } while (--x);
470 }
471 return 0;
472}
int k
Definition: mpi.c:3369
WORD idc
Definition: winmain.c:61
static LRESULT post_key_press(LPARAM lParam, WORD idc)
Definition: winmain.c:357
static const key2code_t key2code_base10[]
Definition: winmain.c:162
static int vk2ascii(unsigned int vk)
Definition: winmain.c:391
static const key2code_t key2code_base16[]
Definition: winmain.c:155
#define CTRL_C
Definition: winmain.c:71
#define CTRL_FLAG
Definition: winmain.c:67
#define CTRL_V
Definition: winmain.c:79
#define VK_F1
Definition: winuser.h:2258

Referenced by _tWinMain().

◆ ReadClipboard()

static char * ReadClipboard ( void  )
static

Definition at line 1032 of file winmain.c.

1033{
1034 char *buffer = NULL;
1035
1036 if (OpenClipboard(NULL)) {
1038 char *fromClipboard;
1039
1040 if (hData != NULL) {
1041 fromClipboard = (char *)GlobalLock(hData);
1042 if (fromClipboard[0])
1043 buffer = _strupr(_strdup(fromClipboard));
1044 GlobalUnlock( hData );
1045 }
1047 }
1048 return buffer;
1049}
#define _strdup
Definition: debug_ros.c:7
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
HANDLE WINAPI GetClipboardData(_In_ UINT)

Referenced by DlgMainProc().

◆ ReadConversion()

static char * ReadConversion ( const char formula)
static

Definition at line 902 of file winmain.c.

903{
904 size_t len = strlen(formula);
905 char *str = (char *)malloc(len+3);
906
907 if (str == NULL)
908 return NULL;
909
910 str[0] = '(';
911 memcpy(str+1, formula, len);
912 str[len+1] = ')';
913 str[len+2] = '\0';
914
915 StringCbCopy(calc.source, sizeof(calc.source), (*calc.buffer == _T('\0')) ? _T("0") : calc.buffer);
916
917 /* clear display content before proceeding */
919 calc.buffer[0] = _T('\0');
920
921 return str;
922}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define malloc
Definition: debug_ros.c:4
GLenum GLsizei len
Definition: glext.h:6722
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
const WCHAR * str

Referenced by DlgMainProc().

◆ run_canc()

static void run_canc ( calc_number_t c)
static

Definition at line 1230 of file winmain.c.

1231{
1232 flush_postfix();
1233 rpn_zero(c);
1234
1235 /* clear also scientific display modes */
1236 calc.sci_out = FALSE;
1237 calc.sci_in = FALSE;
1238
1239 /* clear state of inv and hyp flags */
1242}
void flush_postfix(void)
Definition: rpn_ieee.c:470
const GLubyte * c
Definition: glext.h:8905

◆ run_dat_sta()

static void run_dat_sta ( calc_number_t number)
static

Definition at line 1099 of file winmain.c.

1100{
1103
1104 rpn_alloc(&s->num);
1105 rpn_copy(&s->num, a);
1106 s->base = calc.base;
1107 s->next = NULL;
1108 if (p == NULL)
1109 calc.stat = s;
1110 else {
1111 while (p->next != NULL)
1112 p = (statistic_t *)(p->next);
1113 p->next = s;
1114 }
1116}
void rpn_alloc(calc_number_t *c)
Definition: fun_ieee.c:601

◆ run_fe()

static void run_fe ( calc_number_t number)
static

Definition at line 1187 of file winmain.c.

1188{
1189 calc.sci_out = ((calc.sci_out != FALSE) ? FALSE : TRUE);
1190}

◆ run_lpar()

static void run_lpar ( calc_number_t c)
static

Definition at line 1249 of file winmain.c.

1250{
1252}
@ RPN_OPERATOR_PARENT
Definition: calc.h:102

◆ run_mm()

static void run_mm ( calc_number_t c)
static

Definition at line 1128 of file winmain.c.

1129{
1131
1132 cn.number = *c;
1133 cn.base = calc.base;
1136}
@ RPN_OPERATOR_SUB
Definition: calc.h:112
void run_operator(calc_node_t *result, calc_node_t *a, calc_node_t *b, unsigned int operation)
Definition: rpn_ieee.c:314
#define c
Definition: ke_i.h:80
static BYTE cn[]
Definition: cert.c:2938

◆ run_mp()

static void run_mp ( calc_number_t c)
static

Definition at line 1118 of file winmain.c.

1119{
1121
1122 cn.number = *c;
1123 cn.base = calc.base;
1126}
@ RPN_OPERATOR_ADD
Definition: calc.h:111

◆ run_ms()

static void run_ms ( calc_number_t c)
static

Definition at line 1138 of file winmain.c.

1139{
1143}
int rpn_is_zero(calc_number_t *c)
Definition: fun_ieee.c:596
DWORD base
Definition: calc.h:135

◆ run_mw()

static void run_mw ( calc_number_t c)
static

Definition at line 1145 of file winmain.c.

1146{
1147 calc_number_t tmp;
1148
1149 rpn_copy(&tmp, &calc.memory.number);
1152 if (calc.is_memory)
1153 rpn_copy(c, &tmp);
1155}

◆ run_rpar()

static void run_rpar ( calc_number_t c)
static

Definition at line 1244 of file winmain.c.

1245{
1247}
void exec_closeparent(calc_number_t *)
Definition: rpn_ieee.c:436

◆ save_config()

static void save_config ( void  )
static

Definition at line 334 of file winmain.c.

335{
336 TCHAR buf[32];
338
339 osvi.dwOSVersionInfoSize = sizeof(osvi);
341
342 switch (osvi.dwPlatformId) {
345 StringCbPrintf(buf, sizeof(buf), _T("%lu"), calc.layout);
346 WriteProfileString(_T("SciCalc"), _T("layout"), buf);
347 WriteProfileString(_T("SciCalc"), _T("UseSep"), (calc.usesep==TRUE) ? _T("1") : _T("0"));
348 break;
349
350 default: /* VER_PLATFORM_WIN32_NT */
351 SaveRegInt(_T("SOFTWARE\\Microsoft\\Calc"), _T("layout"), calc.layout);
352 SaveRegInt(_T("SOFTWARE\\Microsoft\\Calc"), _T("UseSep"), calc.usesep);
353 break;
354 }
355}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define WriteProfileString
Definition: winbase.h:3951
static void SaveRegInt(LPCTSTR lpszApp, LPCTSTR lpszKey, int iValue)
Definition: winmain.c:288

Referenced by _tWinMain().

◆ SaveRegInt()

static void SaveRegInt ( LPCTSTR  lpszApp,
LPCTSTR  lpszKey,
int  iValue 
)
static

Definition at line 288 of file winmain.c.

289{
290 HKEY hKey;
291
293 {
294 RegSetValueEx(hKey, lpszKey, 0, REG_DWORD, (const BYTE*)&iValue, sizeof(int));
295
296 /* close the key */
298 }
299}
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_SET_VALUE
Definition: nt_native.h:1017
#define REG_DWORD
Definition: sdbapi.c:596
#define RegSetValueEx
Definition: winreg.h:533
#define RegCreateKeyEx
Definition: winreg.h:501

Referenced by save_config().

◆ set_rpn_result()

static void set_rpn_result ( HWND  hwnd,
calc_number_t rpn 
)
static

Definition at line 661 of file winmain.c.

662{
663 calc.sci_in = FALSE;
668}
static void update_parent_display(HWND hWnd)
Definition: winmain.c:568

Referenced by display_rpn_result(), and DlgMainProc().

◆ SubclassButtonProc()

static LRESULT CALLBACK SubclassButtonProc ( HWND  hWnd,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1254 of file winmain.c.

1255{
1257 UINT dwText;
1258 TCHAR text[64];
1259 int dx, dy, len;
1260 SIZE size;
1261 POINT pt;
1262
1263 if(dis->CtlType == ODT_BUTTON)
1264 {
1265 HTHEME hTheme = NULL;
1266 LPBTNINFO lpBtnInfo;
1267
1269 hTheme = calc_OpenThemeData(hWnd, L"Button");
1270
1271 if (hTheme)
1272 {
1273 int iState = 0;
1274
1275 if ((dis->itemState & ODS_DISABLED))
1276 iState |= PBS_DISABLED;
1277 if ((dis->itemState & ODS_SELECTED))
1278 iState |= PBS_PRESSED;
1279
1281 if (lpBtnInfo != NULL)
1282 {
1283 if (lpBtnInfo->bHover)
1284 iState |= PBS_HOT;
1285 }
1286
1288 {
1290 }
1291
1292 // Draw the frame around the control
1293 calc_DrawThemeBackground(hTheme, dis->hDC, BP_PUSHBUTTON, iState, &dis->rcItem, NULL);
1294
1295 calc_CloseThemeData(hTheme);
1296 } else {
1297 /* default state: unpushed */
1298 DWORD dwStyle = 0;
1299
1300 if ((dis->itemState & ODS_SELECTED))
1301 dwStyle = DFCS_PUSHED;
1302
1303 DrawFrameControl(dis->hDC, &dis->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH | dwStyle);
1304 }
1305
1306 /* button text to write */
1308
1309 /*
1310 * little exception: 1/x has different color
1311 * in standard and scientific modes
1312 */
1315 IDC_BUTTON_RX == dis->CtlID) {
1317 } else
1318 for (dx=0; dx<SIZEOF(key2code); dx++) {
1319 if (key2code[dx].idc == dis->CtlID) {
1320 SetTextColor(dis->hDC, key2code[dx].col);
1321 break;
1322 }
1323 }
1324
1325 /* No background, to avoid corruption of the texture */
1326 SetBkMode(dis->hDC, TRANSPARENT);
1327
1328 /* Default state: enabled */
1329 dwText = 0;
1330 if ((dis->itemState & ODS_DISABLED))
1331 dwText = DSS_DISABLED;
1332
1333 /* Draw the text in the button */
1335 dx = ((dis->rcItem.right-dis->rcItem.left) - size.cx) >> 1;
1336 dy = ((dis->rcItem.bottom-dis->rcItem.top) - size.cy) >> 1;
1337 if ((dis->itemState & ODS_SELECTED)) {
1338 dx++;
1339 dy++;
1340 }
1341 pt.x = dis->rcItem.left + dx;
1342 pt.y = dis->rcItem.top + dy;
1343 DrawState(dis->hDC, NULL, NULL, (LPARAM)text, 0, pt.x, pt.y, size.cx, size.cy, DST_TEXT | dwText);
1344 }
1345 return 1L;
1346}
type_DrawThemeParentBackground calc_DrawThemeParentBackground
Definition: theme.c:57
type_OpenThemeData calc_OpenThemeData
Definition: theme.c:50
type_DrawThemeBackground calc_DrawThemeBackground
Definition: theme.c:52
type_IsThemeBackgroundPartiallyTransparent calc_IsThemeBackgroundPartiallyTransparent
Definition: theme.c:55
type_CloseThemeData calc_CloseThemeData
Definition: theme.c:51
type_IsThemeActive calc_IsThemeActive
Definition: theme.c:54
type_IsAppThemed calc_IsAppThemed
Definition: theme.c:53
#define pt(x, y)
Definition: drawing.c:79
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
#define L(x)
Definition: ntvdm.h:50
COLORREF col
Definition: winmain.c:64
@ PBS_DISABLED
Definition: vsstyle.h:89
@ PBS_PRESSED
Definition: vsstyle.h:88
@ PBS_HOT
Definition: vsstyle.h:87
@ BP_PUSHBUTTON
Definition: vsstyle.h:74
#define GetTextExtentPoint32
Definition: wingdi.h:4472
#define TRANSPARENT
Definition: wingdi.h:950
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
#define CALC_CLR_BLUE
Definition: winmain.c:52
#define ODS_DISABLED
Definition: winuser.h:2550
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
#define DrawState
Definition: winuser.h:5782
#define ODS_SELECTED
Definition: winuser.h:2548
#define DFCS_BUTTONPUSH
Definition: winuser.h:501
#define DSS_DISABLED
Definition: winuser.h:519
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define DFC_BUTTON
Definition: winuser.h:476
#define DST_TEXT
Definition: winuser.h:513
#define GetWindowText
Definition: winuser.h:5810
#define ODT_BUTTON
Definition: winuser.h:2543
#define DFCS_PUSHED
Definition: winuser.h:503

Referenced by DlgMainProc().

◆ update_lcd_display()

static void update_lcd_display ( HWND  hwnd)
static

Definition at line 489 of file winmain.c.

490{
491 /*
492 * multiply size of calc.buffer by 2 because it may
493 * happen that separator is used between each digit.
494 * Also added little additional space for dot and '\0'.
495 */
496 TCHAR tmp[MAX_CALC_SIZE * 2 + 2];
497
498 if (calc.buffer[0] == _T('\0'))
499 StringCbCopy(tmp, sizeof(tmp), _T("0"));
500 else
501 StringCbCopy(tmp, sizeof(tmp), calc.buffer);
502
503 /* Add final '.' in decimal mode (if it's missing), but
504 * only if it's a result: no append if it prints "ERROR".
505 */
506 if (calc.base == IDC_RADIO_DEC && !calc.is_nan) {
507 if (_tcschr(tmp, _T('.')) == NULL)
508 StringCbCat(tmp, sizeof(tmp), _T("."));
509 }
510 /* if separator mode is on, let's add an additional space */
511 if (calc.usesep && !calc.sci_in && !calc.sci_out && !calc.is_nan) {
512 /* go to the integer part of the string */
513 TCHAR *p = _tcschr(tmp, _T('.'));
514 TCHAR *e = _tcschr(tmp, _T('\0'));
515 int n=0, t;
516
517 if (p == NULL) p = e;
518 switch (calc.base) {
519 case IDC_RADIO_HEX:
520 case IDC_RADIO_BIN:
521 t = 4;
522 break;
523 default:
524 /* fall here for:
525 IDC_RADIO_DEC:
526 IDC_RADIO_OCT: */
527 t = 3;
528 break;
529 }
530 while (--p > tmp) {
531 if (++n == t && *(p-1) != _T('-')) {
532 memmove(p+1, p, (e-p+1)*sizeof(TCHAR));
533 e++;
534 *p = _T(' ');
535 n = 0;
536 }
537 }
538 /* if decimal mode, apply regional settings */
539 if (calc.base == IDC_RADIO_DEC) {
540 TCHAR *p = tmp;
541 TCHAR *e = _tcschr(tmp, _T('.'));
542
543 /* searching for thousands default separator */
544 while (p < e) {
545 if (*p == _T(' ')) {
546 memmove(p+calc.sThousand_len, p+1, _tcslen(p)*sizeof(TCHAR));
549 } else
550 p++;
551 }
552 /* update decimal point too. */
553 memmove(p+calc.sDecimal_len, p+1, _tcslen(p)*sizeof(TCHAR));
555 }
556 } else {
557 TCHAR *p = _tcschr(tmp, _T('.'));
558
559 /* update decimal point when usesep is false */
560 if (p != NULL) {
561 memmove(p+calc.sDecimal_len, p+1, _tcslen(p)*sizeof(TCHAR));
563 }
564 }
566}
GLdouble GLdouble t
Definition: gl.h:2047
#define e
Definition: ke_i.h:82
#define StringCbCat
Definition: strsafe.h:334
TCHAR sThousand[8]
Definition: calc.h:200
unsigned int sThousand_len
Definition: calc.h:202

Referenced by build_operand(), DlgMainProc(), OnSettingChange(), and set_rpn_result().

◆ update_memory_flag()

static void update_memory_flag ( HWND  hWnd,
BOOL  mem_flag 
)
static

Definition at line 854 of file winmain.c.

855{
856 calc.is_memory = mem_flag;
857 SetDlgItemText(hWnd, IDC_TEXT_MEMORY, mem_flag ? _T("M") : _T(""));
858}
#define IDC_TEXT_MEMORY
Definition: resource.h:96

Referenced by DlgMainProc(), run_mm(), run_mp(), run_ms(), and run_mw().

◆ update_menu()

static void update_menu ( HWND  hWnd)
static

Definition at line 731 of file winmain.c.

732{
733 HMENU hMenu = GetSubMenu(GetMenu(hWnd), 1);
734 unsigned int x;
735
736 for (x=0; x<SIZEOF(upd); x++) {
737 if (*(upd[x].sel) != upd[x].idc) {
740 } else {
743 }
744 }
746}
#define MF_CHECKED
Definition: winuser.h:132
#define MF_UNCHECKED
Definition: winuser.h:204
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)

Referenced by DlgMainProc(), and update_radio().

◆ update_n_stats_items()

static void update_n_stats_items ( HWND  hWnd,
TCHAR buffer,
size_t  cbBuffer 
)
static

Definition at line 860 of file winmain.c.

861{
862 unsigned int n = SendDlgItemMessage(hWnd, IDC_LIST_STAT, LB_GETCOUNT, 0, 0);
863
864 StringCbPrintf(buffer, cbBuffer, _T("n=%u"), n);
866}
#define IDC_TEXT_NITEMS
Definition: resource.h:103
#define LB_GETCOUNT
Definition: winuser.h:2041

Referenced by DlgStatProc().

◆ update_parent_display()

static void update_parent_display ( HWND  hWnd)
static

Definition at line 568 of file winmain.c.

569{
570 TCHAR str[8];
571 int n = eval_parent_count();
572
573 if (!n)
574 str[0] = _T('\0');
575 else
576 StringCbPrintf(str, sizeof(str), _T("(=%d"), n);
578}
#define IDC_TEXT_PARENT
Definition: resource.h:95
int eval_parent_count(void)
Definition: rpn_ieee.c:457

Referenced by set_rpn_result().

◆ update_radio()

static void update_radio ( HWND  hwnd,
unsigned int  base 
)
static

Definition at line 800 of file winmain.c.

801{
802 HMENU hMenu;
803 LPCTSTR lpMenuId;
804 WORD mask;
805 int n;
806
807 switch (base) {
808 case IDC_RADIO_DEC:
811 break;
812 case IDC_RADIO_HEX:
815 break;
816 case IDC_RADIO_OCT:
819 break;
820 case IDC_RADIO_BIN:
823 break;
824 default:
825 return;
826 }
827
828 if (calc.base != base) {
831 calc.base = base;
833
834 hMenu = GetMenu(hwnd);
835 DestroyMenu(hMenu);
836 hMenu = LoadMenu(calc.hInstance, lpMenuId);
837 SetMenu(hwnd, hMenu);
839
840 for (n=0; n<SIZEOF(radio_setup); n++)
842
844 }
845
847
848 if (base == IDC_RADIO_DEC)
850 else
852}
#define IDR_MENU_SCIENTIFIC_2
Definition: resource.h:19
#define IDR_MENU_SCIENTIFIC_1
Definition: resource.h:18
void convert_real_integer(unsigned int base)
Definition: utl_ieee.c:112
unsigned short WORD
Definition: ntddk_ex.h:93
static const radio_config_t radio_setup[]
Definition: winmain.c:753
#define SW_HIDE
Definition: winuser.h:771
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define LoadMenu
Definition: winuser.h:5829
BOOL WINAPI CheckRadioButton(_In_ HWND, _In_ int, _In_ int, _In_ int)
#define SW_SHOW
Definition: winuser.h:778
const CHAR * LPCTSTR
Definition: xmlstorage.h:193

Referenced by DlgMainProc().

◆ UpdateNumberIntl()

static void UpdateNumberIntl ( void  )
static

Definition at line 253 of file winmain.c.

254{
255 /* Get current user defaults */
257 StringCbCopy(calc.sDecimal, sizeof(calc.sDecimal), _T("."));
258
260 StringCbCopy(calc.sThousand, sizeof(calc.sThousand), _T(","));
261
262 /* get the string lengths */
265}
#define LOCALE_USER_DEFAULT
#define LOCALE_SDECIMAL
Definition: winnls.h:44
#define GetLocaleInfo
Definition: winnls.h:1242
#define LOCALE_STHOUSAND
Definition: winnls.h:45

Referenced by load_config(), and OnSettingChange().

◆ upload_stat_number()

static statistic_t * upload_stat_number ( int  n)
static

Definition at line 1157 of file winmain.c.

1158{
1160
1161 if (p == NULL)
1162 return p;
1163
1164 while (n--) {
1165 p = (statistic_t *)(p->next);
1166 if (p == NULL)
1167 return p;
1168 }
1169
1170#ifndef ENABLE_MULTI_PRECISION
1171 if (calc.base != p->base) {
1172 if (calc.base == IDC_RADIO_DEC)
1173 calc.code.f = (double)p->num.i;
1174 else {
1175 calc.code.i = (__int64)p->num.f;
1177 }
1178 } else
1179#endif
1180 rpn_copy(&calc.code, &p->num);
1181
1182 calc.is_nan = FALSE;
1183
1184 return p;
1185}
#define __int64
Definition: basetyps.h:16
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:80
INT64 i
Definition: calc.h:127
double f
Definition: calc.h:126

Referenced by DlgMainProc().

◆ vk2ascii()

static int vk2ascii ( unsigned int  vk)
static

Definition at line 391 of file winmain.c.

392{
393 unsigned short int s;
394 int scan;
395 BYTE state[256];
397
399 return 0;
400
401 scan=MapVirtualKeyEx(vk, 0, layout);
402 s = 0;
403 if (ToAsciiEx(vk, scan, state, &s, 0, layout)>0) {
404 /* convert to upper case */
405 if (s >= 'a' && s <= 'z')
406 s = s - 'a' + 'A';
407 /* add check to CTRL key */
408 if (vk >= 'A' && vk <= 'Z' &&
409 s >= CTRL_A && s <= CTRL_Z)
410 s |= CTRL_FLAG;
411 else
412 if (GetAsyncKeyState(VK_MENU) < 0)
413 s |= ALT_FLAG;
414 return s;
415 }
416 return 0;
417}
static int state
Definition: maze.c:121
static DWORD layout
Definition: bitmap.c:46
WORD vk
Definition: input.c:77
UINT_PTR HKL
Definition: msctf.idl:143
#define CTRL_Z
Definition: winmain.c:80
#define ALT_FLAG
Definition: winmain.c:68
#define CTRL_A
Definition: winmain.c:70
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
_Check_return_ BOOL WINAPI GetKeyboardState(_Out_writes_(256) PBYTE lpKeyState)
#define MapVirtualKeyEx
Definition: winuser.h:5833
SHORT WINAPI GetAsyncKeyState(_In_ int)
int WINAPI ToAsciiEx(_In_ UINT, _In_ UINT, _In_reads_opt_(256) CONST BYTE *, _Out_ LPWORD, _In_ UINT, _In_opt_ HKL)
#define VK_MENU
Definition: winuser.h:2207

Referenced by process_vk_key().

Variable Documentation

◆ BtnCount

UINT BtnCount

Definition at line 251 of file winmain.c.

Referenced by DlgMainProc().

◆ BtnInfo

BTNINFO BtnInfo[255]

Definition at line 250 of file winmain.c.

Referenced by EnumChildProc().

◆ calc

calc_t calc

Definition at line 247 of file winmain.c.

Referenced by _tWinMain(), apply_int_mask(), build_operand(), check_csum(), clean_stat_list(), ConvAdjust(), convert_real_integer(), convert_text2number(), convert_text2number_2(), ConvExecute(), ConvInit(), delete_stat_item(), display_rpn_result(), DlgMainProc(), DlgStatProc(), enable_allowed_controls(), evalStack(), exec_closeparent(), exec_infix2postfix(), flush_postfix(), handle_context_menu(), handle_copy_command(), handle_sequence_input(), load_config(), logic_dbl2int(), OnSettingChange(), post_key_press(), prepare_rpn_result(), prepare_rpn_result_2(), process_vk_key(), ReadConversion(), rpn_acos(), rpn_acosh(), rpn_asin(), rpn_asinh(), rpn_atan(), rpn_atanh(), rpn_ave(), rpn_ave2(), rpn_cbrt(), rpn_cos(), rpn_cosh(), rpn_div_f(), rpn_div_i(), rpn_div_p(), rpn_exp(), rpn_exp10(), rpn_exp2(), rpn_exp3(), rpn_fact(), rpn_frac(), rpn_int(), rpn_ln(), rpn_log(), rpn_mod_f(), rpn_mod_i(), rpn_not(), rpn_pow_f(), rpn_reci(), rpn_s_ex(), rpn_shl_f(), rpn_shr_f(), rpn_sign(), rpn_sin(), rpn_sinh(), rpn_sqr_f(), rpn_sqrt(), rpn_sum(), rpn_sum2(), rpn_tan(), rpn_tanh(), run_canc(), run_dat_sta(), run_fe(), run_mm(), run_mp(), run_ms(), run_mw(), run_operator(), save_config(), set_rpn_result(), seta_assignment(), seta_ltorTerm(), start_rpn_engine(), stat_sum(), stat_sum2(), stop_rpn_engine(), SubclassButtonProc(), update_lcd_display(), update_memory_flag(), update_menu(), update_radio(), UpdateNumberIntl(), upload_stat_number(), validate_angle2rad(), and validate_rad2angle().

◆ function_table

const function_table_t function_table[]
static
Initial value:
= {
}
void rpn_2pi(calc_number_t *c)
Definition: fun_ieee.c:295
void rpn_ln(calc_number_t *c)
Definition: fun_ieee.c:421
void rpn_pi(calc_number_t *c)
Definition: fun_ieee.c:290
void rpn_sinh(calc_number_t *c)
Definition: fun_ieee.c:163
void rpn_frac(calc_number_t *c)
Definition: fun_ieee.c:209
void rpn_tan(calc_number_t *c)
Definition: fun_ieee.c:131
void rpn_dec2dms(calc_number_t *c)
Definition: fun_ieee.c:577
void rpn_sqrt(calc_number_t *c)
Definition: fun_ieee.c:358
void rpn_exp3(calc_number_t *c)
Definition: fun_ieee.c:318
void rpn_exp2(calc_number_t *c)
Definition: fun_ieee.c:308
void rpn_int(calc_number_t *c)
Definition: fun_ieee.c:201
void rpn_cbrt(calc_number_t *c)
Definition: fun_ieee.c:387
void rpn_asin(calc_number_t *c)
Definition: fun_ieee.c:144
void rpn_sin(calc_number_t *c)
Definition: fun_ieee.c:101
void rpn_reci(calc_number_t *c)
Definition: fun_ieee.c:216
void rpn_exp(calc_number_t *c)
Definition: fun_ieee.c:400
void rpn_atan(calc_number_t *c)
Definition: fun_ieee.c:156
void rpn_asinh(calc_number_t *c)
Definition: fun_ieee.c:182
void rpn_cosh(calc_number_t *c)
Definition: fun_ieee.c:169
void rpn_ave2(calc_number_t *c)
Definition: fun_ieee.c:483
void rpn_fact(calc_number_t *c)
Definition: fun_ieee.c:224
void rpn_log(calc_number_t *c)
Definition: fun_ieee.c:429
void rpn_acos(calc_number_t *c)
Definition: fun_ieee.c:150
void rpn_s(calc_number_t *c)
Definition: fun_ieee.c:553
void rpn_tanh(calc_number_t *c)
Definition: fun_ieee.c:175
void rpn_sum(calc_number_t *c)
Definition: fun_ieee.c:499
void rpn_dms2dec(calc_number_t *c)
Definition: fun_ieee.c:563
void rpn_ave(calc_number_t *c)
Definition: fun_ieee.c:467
void rpn_s_m1(calc_number_t *c)
Definition: fun_ieee.c:558
void rpn_cos(calc_number_t *c)
Definition: fun_ieee.c:116
void rpn_sum2(calc_number_t *c)
Definition: fun_ieee.c:509
void rpn_exp10(calc_number_t *c)
Definition: fun_ieee.c:407
void rpn_acosh(calc_number_t *c)
Definition: fun_ieee.c:188
void rpn_atanh(calc_number_t *c)
Definition: fun_ieee.c:194
void rpn_not(calc_number_t *c)
Definition: fun_ieee.c:280
static void run_lpar(calc_number_t *c)
Definition: winmain.c:1249
static void run_mm(calc_number_t *c)
Definition: winmain.c:1128
static void run_dat_sta(calc_number_t *number)
Definition: winmain.c:1099
static void run_canc(calc_number_t *c)
Definition: winmain.c:1230
static void run_mp(calc_number_t *c)
Definition: winmain.c:1118
static void run_ms(calc_number_t *c)
Definition: winmain.c:1138
static void run_mw(calc_number_t *c)
Definition: winmain.c:1145
static void run_fe(calc_number_t *number)
Definition: winmain.c:1187
static void run_rpar(calc_number_t *c)
Definition: winmain.c:1244

Definition at line 209 of file winmain.c.

Referenced by DlgMainProc().

◆ key2code

◆ key2code_base10

const key2code_t key2code_base10[]
static
Initial value:
= {
}
#define VK_F3
Definition: winuser.h:2260
#define VK_F4
Definition: winuser.h:2261
#define VK_F2
Definition: winuser.h:2259

Definition at line 162 of file winmain.c.

Referenced by process_vk_key().

◆ key2code_base16

const key2code_t key2code_base16[]
static
Initial value:
= {
}
#define VK_F12
Definition: winuser.h:2269

Definition at line 155 of file winmain.c.

Referenced by process_vk_key().

◆ operator_codes

◆ radio_setup

const radio_config_t radio_setup[]
static
Initial value:
= {
{ IDC_RADIO_QWORD, MAKE_BITMASK4( 1, 0, 1, 1) },
{ IDC_RADIO_DWORD, MAKE_BITMASK4( 1, 0, 1, 1) },
{ IDC_RADIO_WORD, MAKE_BITMASK4( 1, 0, 1, 1) },
{ IDC_RADIO_BYTE, MAKE_BITMASK4( 1, 0, 1, 1) },
{ IDC_RADIO_DEG, MAKE_BITMASK4( 0, 1, 0, 0) },
{ IDC_RADIO_RAD, MAKE_BITMASK4( 0, 1, 0, 0) },
{ IDC_RADIO_GRAD, MAKE_BITMASK4( 0, 1, 0, 0) },
}
#define MAKE_BITMASK4(_show_b16, _show_b10, _show_b8, _show_b2)
Definition: winmain.c:25

Definition at line 753 of file winmain.c.

Referenced by update_radio().

◆ upd