fixed code to compile both as ansi and unicode version, build as unicode by default
Modified: trunk/reactos/subsys/system/calc/calc.xml
Modified: trunk/reactos/subsys/system/calc/dialog.c
Modified: trunk/reactos/subsys/system/calc/stats.c
Modified: trunk/reactos/subsys/system/calc/winecalc.c
Modified: trunk/reactos/subsys/system/calc/winecalc.h

Modified: trunk/reactos/subsys/system/calc/calc.xml
--- trunk/reactos/subsys/system/calc/calc.xml	2005-08-26 20:35:33 UTC (rev 17563)
+++ trunk/reactos/subsys/system/calc/calc.xml	2005-08-26 21:02:47 UTC (rev 17564)
@@ -1,7 +1,9 @@
-<module name="calc" type="win32gui" installbase="system32" installname="calc.exe" warnings="true">
+<module name="calc" type="win32gui" installbase="system32" installname="calc.exe">
 	<include base="calc">.</include>
 	<define name="__USE_W32API" />
 	<define name="_WIN32_IE">0x0501</define>
+	<define name="UNICODE" />
+	<define name="_UNICODE" />
 	<library>kernel32</library>
 	<library>user32</library>
 	<library>gdi32</library>

Modified: trunk/reactos/subsys/system/calc/dialog.c
--- trunk/reactos/subsys/system/calc/dialog.c	2005-08-26 20:35:33 UTC (rev 17563)
+++ trunk/reactos/subsys/system/calc/dialog.c	2005-08-26 21:02:47 UTC (rev 17564)
@@ -19,6 +19,7 @@
  */
 
 #include <windows.h>
+#include <tchar.h>
 #include "dialog.h"
 #include "resource.h"
 #include "winecalc.h"
@@ -50,32 +51,32 @@
         HFONT hFont;
         HFONT hFontOrg;
 
-        char c1[CALC_BUF_SIZE];
-        char c2[CALC_BUF_SIZE];
-        char c3[CALC_BUF_SIZE];
-        char c4[CALC_BUF_SIZE];
-        char c5[CALC_BUF_SIZE];
+        TCHAR c1[CALC_BUF_SIZE];
+        TCHAR c2[CALC_BUF_SIZE];
+        TCHAR c3[CALC_BUF_SIZE];
+        TCHAR c4[CALC_BUF_SIZE];
+        TCHAR c5[CALC_BUF_SIZE];
 
         hdc = BeginPaint( hDlg, &ps );
 
         hMemDC = CreateCompatibleDC( hdc );
 
-        LoadString( hInstance, IDS_COPYRIGHT1, c1, sizeof(c1));
-        LoadString( hInstance, IDS_COPYRIGHT2, c2, sizeof(c2));
-        LoadString( hInstance, IDS_COPYRIGHT3, c3, sizeof(c3));
-        LoadString( hInstance, IDS_COPYRIGHT4, c4, sizeof(c4));
-        LoadString( hInstance, IDS_COPYRIGHT5, c5, sizeof(c5));
+        LoadString( hInstance, IDS_COPYRIGHT1, c1, sizeof(c1) / sizeof(c1[0]));
+        LoadString( hInstance, IDS_COPYRIGHT2, c2, sizeof(c2) / sizeof(c2[0]));
+        LoadString( hInstance, IDS_COPYRIGHT3, c3, sizeof(c3) / sizeof(c3[0]));
+        LoadString( hInstance, IDS_COPYRIGHT4, c4, sizeof(c4) / sizeof(c4[0]));
+        LoadString( hInstance, IDS_COPYRIGHT5, c5, sizeof(c5) / sizeof(c5[0]));
 
         hFont = GetStockObject(DEFAULT_GUI_FONT);
         hFontOrg = SelectObject(hdc, hFont);
 
         SetBkMode(hdc, TRANSPARENT);
 
-	TextOut(hdc, 10, 10, c1, strlen(c1));
-        TextOut(hdc, 10, 35, c2, strlen(c2));
-        TextOut(hdc, 10, 50, c3, strlen(c3));
-        TextOut(hdc, 10, 75, c4, strlen(c4));
-	TextOut(hdc, 10, 90, c5, strlen(c5));
+	TextOut(hdc, 10, 10, c1, _tcslen(c1));
+        TextOut(hdc, 10, 35, c2, _tcslen(c2));
+        TextOut(hdc, 10, 50, c3, _tcslen(c3));
+        TextOut(hdc, 10, 75, c4, _tcslen(c4));
+	TextOut(hdc, 10, 90, c5, _tcslen(c5));
 
         SelectObject(hdc, hFontOrg);
 

Modified: trunk/reactos/subsys/system/calc/stats.c
--- trunk/reactos/subsys/system/calc/stats.c	2005-08-26 20:35:33 UTC (rev 17563)
+++ trunk/reactos/subsys/system/calc/stats.c	2005-08-26 21:02:47 UTC (rev 17564)
@@ -21,6 +21,7 @@
 #include <stdio.h> // sprintf
 
 #include <windows.h>
+#include <tchar.h>
 
 #include "stats.h"
 #include "resource.h"
@@ -41,8 +42,8 @@
 
     case WM_INITDIALOG:
         hWndListBox = CreateWindow(
-            "LISTBOX",	// pointer to registered class name
-            "Listbox",	// pointer to window name
+            TEXT("LISTBOX"),	// pointer to registered class name
+            TEXT("Listbox"),	// pointer to window name
             WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER | LBS_NOINTEGRALHEIGHT,	// window style
                     6,	// horizontal position of window
                     6,	// vertical position of window
@@ -100,7 +101,7 @@
 
     case WM_PAINT:
       {
-        char s[CALC_BUF_SIZE];
+        TCHAR s[CALC_BUF_SIZE];
         int lb_count;
         HFONT hFont;
         HFONT hFontOrg;
@@ -110,10 +111,10 @@
         hFontOrg = SelectObject(hdc, hFont);
 
         lb_count = SendMessage(hWndListBox, LB_GETCOUNT, 0, 0);
-        sprintf(s, "n=%d", lb_count);
+        _stprintf(s, TEXT("n=%d"), lb_count);
 
         SetBkMode(hdc, TRANSPARENT);
-        TextOut(hdc, 98, 121, s, strlen(s));
+        TextOut(hdc, 98, 121, s, _tcslen(s));
         SelectObject(hdc, hFontOrg);
         EndPaint( hDlg, &ps );
 
@@ -121,7 +122,7 @@
       }
 	case WM_CLOSE:
         hWndDlgStats = 0;                                 // invalidate stats dialog
-        SendMessage(GetParent(hDlg), WM_CHAR, '\x13', 1); // disable stats related calculator buttons
+        SendMessage(GetParent(hDlg), WM_CHAR, TEXT('\x13'), 1); // disable stats related calculator buttons
         DestroyWindow( hDlg );
 
         return 0;

Modified: trunk/reactos/subsys/system/calc/winecalc.c
--- trunk/reactos/subsys/system/calc/winecalc.c	2005-08-26 20:35:33 UTC (rev 17563)
+++ trunk/reactos/subsys/system/calc/winecalc.c	2005-08-26 21:02:47 UTC (rev 17564)
@@ -22,6 +22,7 @@
 #include <math.h>
 
 #include <windows.h>
+#include <tchar.h>
 // #include <commctrl.h>
 
 #include "winecalc.h"
@@ -71,9 +72,9 @@
 
 // various display error messages
 
-static char err_invalid        [CALC_BUF_SIZE];
-static char err_divide_by_zero [CALC_BUF_SIZE];
-static char err_undefined      [CALC_BUF_SIZE];
+static TCHAR err_invalid        [CALC_BUF_SIZE];
+static TCHAR err_divide_by_zero [CALC_BUF_SIZE];
+static TCHAR err_undefined      [CALC_BUF_SIZE];
 
 // calculator state is kept here
 
@@ -105,7 +106,7 @@
 
 static HMENU menus[3];
 
-static char appname[40];
+static TCHAR appname[40];
 
 static int debug;
 
@@ -123,33 +124,45 @@
     WNDCLASS wc;
     HWND hWnd;
     HACCEL haccel;
-
-    char s[CALC_BUF_SIZE];
+#ifdef UNICODE
+    CHAR s_ansi[CALC_BUF_SIZE];
+#endif
+    TCHAR s[CALC_BUF_SIZE];
     int r;
 
     hInstance = hInst;
 
-    r = GetProfileString("SciCalc",
-                         "layout",
-                         "0",
+    r = GetProfileString(TEXT("SciCalc"),
+                         TEXT("layout"),
+                         TEXT("0"),
                          s,
                          CALC_BUF_SIZE
     );
 
+#ifdef UNICODE
+    wcstombs(s_ansi, s, sizeof(s_ansi));
+    calc.sciMode  = atoi(s_ansi);
+#else
     calc.sciMode  = atoi(s);
+#endif
 
     if (calc.sciMode != 0 &&
         calc.sciMode != 1)
         calc.sciMode = 1; // Standard Mode
 
-    r = GetProfileString("SciCalc",
-                         "UseSep",
-                         "0",
+    r = GetProfileString(TEXT("SciCalc"),
+                         TEXT("UseSep"),
+                         TEXT("0"),
                          s,
                          CALC_BUF_SIZE
         );
 
-    calc.digitGrouping = atoi(s);
+#ifdef UNICODE
+    wcstombs(s_ansi, s, sizeof(s_ansi));
+    calc.digitGrouping  = atoi(s_ansi);
+#else
+    calc.digitGrouping  = atoi(s);
+#endif
 
     if (calc.digitGrouping != 0 &&
         calc.digitGrouping != 1)
@@ -157,13 +170,13 @@
 
     calc.new      = 1; // initialize struct values
 
-    if (!LoadString( hInst, IDS_APPNAME,            appname,            sizeof(appname)))
+    if (!LoadString( hInst, IDS_APPNAME,            appname,            sizeof(appname) / sizeof(appname[0])))
         exit(1);
-    if (!LoadString( hInst, IDS_ERR_INVALID_INPUT,  err_invalid,        sizeof(err_invalid)))
+    if (!LoadString( hInst, IDS_ERR_INVALID_INPUT,  err_invalid,        sizeof(err_invalid) / sizeof(err_invalid[0])))
         exit(1);
-    if (!LoadString( hInst, IDS_ERR_DIVIDE_BY_ZERO, err_divide_by_zero, sizeof(err_divide_by_zero)))
+    if (!LoadString( hInst, IDS_ERR_DIVIDE_BY_ZERO, err_divide_by_zero, sizeof(err_divide_by_zero) / sizeof(err_divide_by_zero[0])))
         exit(1);
-    if (!LoadString( hInst, IDS_ERR_UNDEFINED,      err_undefined,      sizeof(err_undefined)))
+    if (!LoadString( hInst, IDS_ERR_UNDEFINED,      err_undefined,      sizeof(err_undefined) / sizeof(err_undefined[0])))
         exit(1);
 
     wc.style         = CS_HREDRAW | CS_VREDRAW;
@@ -197,7 +210,7 @@
     ShowWindow( hWnd, cmdshow );
     UpdateWindow( hWnd );
 
-    if (!(haccel = LoadAccelerators(hInst, "MAIN_MENU")))
+    if (!(haccel = LoadAccelerators(hInst, TEXT("MAIN_MENU"))))
         exit(1);
 
     while( GetMessage(&msg, NULL, 0, 0) ) {
@@ -259,13 +272,13 @@
     case WM_DESTROY:
         {
             int r;
-            char s[CALC_BUF_SIZE];
+            TCHAR s[CALC_BUF_SIZE];
 
-            sprintf(s, "%d", calc.sciMode);
-            r = WriteProfileString("SciCalc", "layout", s);
+            _stprintf(s, TEXT("%d"), calc.sciMode);
+            r = WriteProfileString(TEXT("SciCalc"), TEXT("layout"), s);
 
-            sprintf(s, "%d", calc.digitGrouping);
-            r = WriteProfileString("SciCalc", "UseSep", s);
+            _stprintf(s, TEXT("%d"), calc.digitGrouping);
+            r = WriteProfileString(TEXT("SciCalc"), TEXT("UseSep"), s);
         }
 
         DestroyCalc( &calc );
@@ -277,7 +290,7 @@
 
         case VK_F1:
             calc.next = 1;
-            MessageBox(hWnd, "No Help Available", "Windows Help", MB_OK);
+            MessageBox(hWnd, TEXT("No Help Available"), TEXT("Windows Help"), MB_OK);
             return 0;
 
         case VK_F2: // DWORD
@@ -365,7 +378,7 @@
         case VK_DELETE:
 
             calc.next = 1;
-            calc.buffer[0] = '\0';
+            calc.buffer[0] = TEXT('\0');
             calc_buffer_display(&calc);
             return 0;
 
@@ -377,11 +390,11 @@
 
     case WM_CHAR:
         if (debug)
-            show_debug(&calc, "Start WM_CHAR", wParam, lParam);
+            show_debug(&calc, TEXT("Start WM_CHAR"), wParam, lParam);
 
         switch (wParam) {
 
-        case '\x13': // Ctrl+S Sta Statistics
+        case TEXT('\x13'): // Ctrl+S Sta Statistics
 
             if (hWndDlgStats) { // Statistics Box already displayed, focus but don't create another one
                 // SetFocus(hWndDlgStats);
@@ -400,7 +413,7 @@
 
                    hWndDlgStats = CreateDialog( // modeless dialog
                       calc.hInst,  	            // handle to application instance
-                      "DLG_STATS",	            // identifies dialog box template name
+                      TEXT("DLG_STATS"),	            // identifies dialog box template name
                       hWnd,	                    // handle to owner window
                       StatsDlgProc);            // pointer to dialog box procedure
 
@@ -413,14 +426,14 @@
 
             break;
 
-        case '\x01': // Ctrl+A Ave Statistics
-        case '\x04': // Ctrl+D s Standard Deviation Statistics
-        case '\x14': // Ctrl+T Sum Statistics
+        case TEXT('\x01'): // Ctrl+A Ave Statistics
+        case TEXT('\x04'): // Ctrl+D s Standard Deviation Statistics
+        case TEXT('\x14'): // Ctrl+T Sum Statistics
             {
                int i;
                int n;
 
-               char s[CALC_BUF_SIZE];
+               TCHAR s[CALC_BUF_SIZE];
                double val = 0L;
                double avg = 0L;
                double total = 0L;
@@ -438,10 +451,10 @@
                    x[i] = val;
                }
 
-               if (LOWORD(wParam) != '\x14') // not sum only
+               if (LOWORD(wParam) != TEXT('\x14')) // not sum only
                   avg = total / n;
 
-               if (LOWORD(wParam == '\x04')) {   // standard deviation is sqrt(sum( xbar - x )^2 / (n-1))
+               if (LOWORD(wParam == TEXT('\x04'))) {   // standard deviation is sqrt(sum( xbar - x )^2 / (n-1))
                    val = 0L;
 
                    for (i=0;i<n;i++)
@@ -453,28 +466,28 @@
                       total = sqrt(val / (n - 1)); // sample of population
                }
 
-               if (LOWORD(wParam) == '\x01') // average or mean
+               if (LOWORD(wParam) == TEXT('\x01')) // average or mean
                    total = avg;
 
                calc_ftoa(&calc, total, s);
-               strcpy(calc.buffer, s);
+               _tcscpy(calc.buffer, s);
                calc_buffer_display(&calc);
             }
 
             break;
 
-        case '\x03': // Ctrl+C Copy
+        case TEXT('\x03'): // Ctrl+C Copy
             {
                 int i;
                 int len;
-                char *s;
+                TCHAR *s;
                 HGLOBAL hGlobalMemory;
                 PSTR pGlobalMemory;
 
-                if (!(len = strlen(calc.display)))
+                if (!(len = _tcslen(calc.display)))
                     return 0;
 
-                if (!(hGlobalMemory = GlobalAlloc(GHND, len + 1)))
+                if (!(hGlobalMemory = GlobalAlloc(GHND, (len + 1) * sizeof(TCHAR))))
                     return 0;
 
                 if (!(pGlobalMemory = GlobalLock(hGlobalMemory)))
@@ -502,15 +515,15 @@
             }
             break;
 
-        case '\x16': // Ctrl+V Paste
+        case TEXT('\x16'): // Ctrl+V Paste
             {
-                char *s;
+                TCHAR *s;
                 int c;
                 int cmd = 0;
                 int size = 0;
                 int i = 0;
                 HGLOBAL hGlobalMemory;
-                PSTR pGlobalMemory;
+                LPTSTR pGlobalMemory;
 
                 if (IsClipboardFormatAvailable(CF_TEXT)) {
                     if (!OpenClipboard(hWnd))
@@ -522,13 +535,13 @@
                     if (!(size = GlobalSize(hGlobalMemory)))
                         return 0;
 
-                    if (!(s = (char *)malloc(size)))
+                    if (!(s = (TCHAR *)malloc(size)))
                         return 0;
 
                     if (!(pGlobalMemory = GlobalLock(hGlobalMemory)))
                         return 0;
 
-                    strcpy(s, pGlobalMemory);
+                    _tcscpy(s, pGlobalMemory);
 
                     GlobalUnlock(hGlobalMemory);
 
@@ -548,11 +561,11 @@
                     // parse the pasted data, validate and SendMessage it one character at a time.
                     // it would appear wincalc does it this way (slow), although very slow appearing on Wine.
 
-                    while ((c = *s++) && (i++ < size)) {
-                        if (c == ':') {
+                    while ((c = *s++) && (i++ < size / sizeof(TCHAR))) {
+                        if (c == TEXT(':')) {
                             cmd = 1;
                         }
-                        else if (c == '\\') {
+                        else if (c == TEXT('\\')) {
                             SendMessage(hWnd, WM_KEYDOWN, VK_INSERT, lParam);
                         }
                         else {
@@ -560,34 +573,34 @@
                                 cmd = 0;
 
                                 switch(c) {
-                                case 'c': // clear memory
+                                case TEXT('c'): // clear memory
 
-                                case 'C':
+                                case TEXT('C'):
                                     SendMessage(hWnd, WM_CHAR, 0x0c, lParam);
                                     break;
-                                case 'e': // enable scientific notation
+                                case TEXT('e'): // enable scientific notation
 
-                                case 'E':
+                                case TEXT('E'):
                                     SendMessage(hWnd, WM_CHAR, 'v', lParam);
                                     break;
-                                case 'm': // store display in memory
+                                case TEXT('m'): // store display in memory
 
-                                case 'M':
+                                case TEXT('M'):
                                     SendMessage(hWnd, WM_CHAR, 0x0d, NUMBER_OF_THE_BEAST);
                                     break;
-                                case 'p': // add display to memory
+                                case TEXT('p'): // add display to memory
 
-                                case 'P':
+                                case TEXT('P'):
                                     SendMessage(hWnd, WM_CHAR, 0x10, lParam);
                                     break;
-                                case 'q': // clear current calculation
+                                case TEXT('q'): // clear current calculation
 
-                                case 'Q':
-                                    SendMessage(hWnd, WM_CHAR, '\x1b', lParam);
+                                case TEXT('Q'):
+                                    SendMessage(hWnd, WM_CHAR, TEXT('\x1b'), lParam);
                                     break;
-                                case 'r': // read memory into display
+                                case TEXT('r'): // read memory into display
 
-                                case 'R':
+                                case TEXT('R'):
                                     SendMessage(hWnd, WM_CHAR, 0x12, lParam);
                                     break;
                                 default: // just eat it but complain
@@ -598,32 +611,32 @@
                             }
                             else {
                                 if ((calc.numBase == NBASE_HEX) &&
-                                        ((c >= '0' && c <= '9') ||
-                                        (c >= 'a' && c <= 'f') ||
-                                        (c >= 'A' && c <= 'F'))) {
+                                        ((c >= TEXT('0') && c <= TEXT('9')) ||
+                                        (c >= TEXT('a') && c <= TEXT('f')) ||
+                                        (c >= TEXT('A') && c <= TEXT('F')))) {
 
                                     SendMessage(hWnd, WM_CHAR, c, lParam);
                                 }
                                 else if ((calc.numBase == NBASE_DECIMAL) &&
-                                        (c >= '0' && c <= '9')) {
+                                        (c >= TEXT('0') && c <= TEXT('9'))) {
                                     SendMessage(hWnd, WM_CHAR, c, lParam);
                                 }
                                 else if ((calc.numBase == NBASE_OCTAL) &&
-                                        (c >= '0' && c <= '7')) {
+                                        (c >= TEXT('0') && c <= TEXT('7'))) {
                                     SendMessage(hWnd, WM_CHAR, c, lParam);
                                 }
                                 else if ((calc.numBase == NBASE_BINARY) &&
-                                        (c == '0' || c == '1')) {
+                                        (c == TEXT('0') || c == TEXT('1'))) {
                                     SendMessage(hWnd, WM_CHAR, c, lParam);
                                 }
-                                else if (c == '.' || c == ',' ||
-                                        c == 'e' || c == 'E' ||
-                                        c == '+' || c == '-') {
+                                else if (c == TEXT('.') || c == TEXT(',') ||
+                                        c == TEXT('e') || c == TEXT('E') ||
+                                        c == TEXT('+') || c == TEXT('-')) {
                                     SendMessage(hWnd, WM_CHAR, c, lParam);
                                 }
-                                else if (c == ' ' ||  // eat harmless trash here
-                                    c == ';' ||
-                                        c == ':') {
+                                else if (c == TEXT(' ') ||  // eat harmless trash here
+                                    c == TEXT(';') ||
+                                        c == TEXT(':')) {
                                     ;                  // noop
                                 }
                                 else {                // extra spicy trash gets noticed
@@ -650,11 +663,11 @@
         switch(LOWORD(wParam)) {
 
         case IDM_COPY:
-            SendMessage(hWnd, WM_CHAR, '\x03', lParam);
+            SendMessage(hWnd, WM_CHAR, TEXT('\x03'), lParam);
             return 0;
 
         case IDM_PASTE:
-            SendMessage(hWnd, WM_CHAR, '\x16', lParam);
+            SendMessage(hWnd, WM_CHAR, TEXT('\x16'), lParam);
             return 0;
 
         case IDM_MODE_STANDARD:
@@ -739,11 +752,11 @@
             return 0;
 
         case IDM_HELP_TOPICS:
-            MessageBox(hWnd, "No Help Available", "Windows Help", MB_OK);
+            MessageBox(hWnd, TEXT("No Help Available"), TEXT("Windows Help"), MB_OK);
             return 0;
 
         case IDM_ABOUT:
-            DialogBox( calc.hInst, "DLG_ABOUT", hWnd, AboutDlgProc );
+            DialogBox( calc.hInst, TEXT("DLG_ABOUT"), hWnd, AboutDlgProc );
             return 0;
 
         case ID_CALC_NS_HEX:
@@ -944,39 +957,39 @@
                 case ID_CALC_SEVEN:
                 case ID_CALC_EIGHT:
                 case ID_CALC_NINE:
-                    SendMessage(hWnd, WM_CHAR, LOWORD(wParam)+'0' , lParam);
+                    SendMessage(hWnd, WM_CHAR, LOWORD(wParam)+TEXT('0') , lParam);
                     break;
 
                 case ID_CALC_A:
-                    SendMessage(hWnd, WM_CHAR, 'a', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('a'), lParam);
                     break;
 
                 case ID_CALC_B:
-                    SendMessage(hWnd, WM_CHAR, 'b', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('b'), lParam);
                     break;
 
                 case ID_CALC_C:
-                    SendMessage(hWnd, WM_CHAR, 'c', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('c'), lParam);
                     break;
 
                 case ID_CALC_D:
-                    SendMessage(hWnd, WM_CHAR, 'd', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('d'), lParam);
                     break;
 
                 case ID_CALC_E:
-                    SendMessage(hWnd, WM_CHAR, 'e', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('e'), lParam);
                     break;
 
                 case ID_CALC_F:
-                    SendMessage(hWnd, WM_CHAR, 'f', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('f'), lParam);
                     break;
 
                 case ID_CALC_DECIMAL:
-                    SendMessage(hWnd, WM_CHAR, '.', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('.'), lParam);
                     break;
 
                 case ID_CALC_BACKSPACE:
-                    SendMessage(hWnd, WM_CHAR, '\b', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('\b'), lParam);
                     break;
 
                 case ID_CALC_CLEAR_ENTRY:
@@ -984,7 +997,7 @@
                     break;
 
                 case ID_CALC_CLEAR_ALL:
-                    SendMessage(hWnd, WM_CHAR, '\x1b', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('\x1b'), lParam);
                     break;
 
                 case ID_CALC_MEM_CLEAR:
@@ -1004,75 +1017,75 @@
                     break;
 
                 case ID_CALC_SQRT:
-                    SendMessage(hWnd, WM_CHAR, '?', lParam); // this is not a wincalc keystroke
+                    SendMessage(hWnd, WM_CHAR, TEXT('?'), lParam); // this is not a wincalc keystroke
                     break;
 
                 case ID_CALC_SQUARE:
-                    SendMessage(hWnd, WM_CHAR, '@', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('@'), lParam);
                     break;
 
                 case ID_CALC_PI:
-                    SendMessage(hWnd, WM_CHAR, 'p', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('p'), lParam);
                     break;
 
                 case ID_CALC_LN:
-                    SendMessage(hWnd, WM_CHAR, 'n', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('n'), lParam);
                     break;
 
                 case ID_CALC_LOG10:
-                    SendMessage(hWnd, WM_CHAR, 'l', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('l'), lParam);
                     break;
 
                 case ID_CALC_CUBE:
-                    SendMessage(hWnd, WM_CHAR, '#', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('#'), lParam);
                     break;
 
                 case ID_CALC_POWER:
-                    SendMessage(hWnd, WM_CHAR, 'y', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('y'), lParam);
                     break;
 
                 case ID_CALC_SIN:
-                    SendMessage(hWnd, WM_CHAR, 's', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('s'), lParam);
                     break;
 
                 case ID_CALC_COS:
-                    SendMessage(hWnd, WM_CHAR, 'o', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('o'), lParam);
                     break;
 
                 case ID_CALC_TAN:
-                    SendMessage(hWnd, WM_CHAR, 't', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('t'), lParam);
                     break;
 
                 case ID_CALC_LSH:
-                    SendMessage(hWnd, WM_CHAR, '<', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('<'), lParam);
                     break;
 
                 case ID_CALC_NOT:
-                    SendMessage(hWnd, WM_CHAR, '~', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('~'), lParam);
                     break;
 
                 case ID_CALC_AND:
-                    SendMessage(hWnd, WM_CHAR, '&', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('&'), lParam);
                     break;
 
                 case ID_CALC_OR:
-                    SendMessage(hWnd, WM_CHAR, '|', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('|'), lParam);
                     break;
 
                 case ID_CALC_XOR:
-                    SendMessage(hWnd, WM_CHAR, '^', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('^'), lParam);
                     break;
 
                 case ID_CALC_INT:
-                    SendMessage(hWnd, WM_CHAR, ';', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT(';'), lParam);
                     break;
 
                 case ID_CALC_FACTORIAL:
-                    SendMessage(hWnd, WM_CHAR, '!', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('!'), lParam);
                     break;
 
                 case ID_CALC_RECIPROCAL:
-                    SendMessage(hWnd, WM_CHAR, 'r', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('r'), lParam);
                     break;
 
                 case ID_CALC_SIGN:
@@ -1080,47 +1093,47 @@
                     break;
 
                 case ID_CALC_PLUS:
-                    SendMessage(hWnd, WM_CHAR, '+', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('+'), lParam);
                     break;
 
                 case ID_CALC_MINUS:
-                    SendMessage(hWnd, WM_CHAR, '-', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('-'), lParam);
                     break;
 
                 case ID_CALC_MULTIPLY:
-                    SendMessage(hWnd, WM_CHAR, '*', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('*'), lParam);
                     break;
 
                 case ID_CALC_DIVIDE:
-                    SendMessage(hWnd, WM_CHAR, '/', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('/'), lParam);
                     break;
 
                 case ID_CALC_EQUALS:
-                    SendMessage(hWnd, WM_CHAR, '=', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('='), lParam);
                     break;
 
                 case ID_CALC_PERCENT:
-                    SendMessage(hWnd, WM_CHAR, '%', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('%'), lParam);
                     break;
 
                 case ID_CALC_EXP:
-                    SendMessage(hWnd, WM_CHAR, 'x', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('x'), lParam);
                     break;
 
                 case ID_CALC_FE:
-                    SendMessage(hWnd, WM_CHAR, 'v', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('v'), lParam);
                     break;
 
                 case ID_CALC_LEFTPAREN:
-                    SendMessage(hWnd, WM_CHAR, '(', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('('), lParam);
                     break;
 
                 case ID_CALC_RIGHTPAREN:
-                    SendMessage(hWnd, WM_CHAR, ')', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT(')'), lParam);
                     break;
 
                 case ID_CALC_MOD:
-                    SendMessage(hWnd, WM_CHAR, '%', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('%'), lParam);
                     break;
 
                 case ID_CALC_DAT:
@@ -1128,23 +1141,23 @@
                     break;
 
                 case ID_CALC_AVE:
-                    SendMessage(hWnd, WM_CHAR, '\x01', lParam); // Ctrl+A
+                    SendMessage(hWnd, WM_CHAR, TEXT('\x01'), lParam); // Ctrl+A
                     break;
 
                 case ID_CALC_S:
-                    SendMessage(hWnd, WM_CHAR, '\x04', lParam); // Ctrl+D
+                    SendMessage(hWnd, WM_CHAR, TEXT('\x04'), lParam); // Ctrl+D
                     break;
 
                 case ID_CALC_STA:
-                    SendMessage(hWnd, WM_CHAR, '\x13', lParam); // Ctrl+S
+                    SendMessage(hWnd, WM_CHAR, TEXT('\x13'), lParam); // Ctrl+S
                     break;
 
                 case ID_CALC_SUM:
-                    SendMessage(hWnd, WM_CHAR, '\x14', lParam); // Ctrl+T
+                    SendMessage(hWnd, WM_CHAR, TEXT('\x14'), lParam); // Ctrl+T
                     break;
 
                 case ID_CALC_DMS:
-                    SendMessage(hWnd, WM_CHAR, 'm', lParam);
+                    SendMessage(hWnd, WM_CHAR, TEXT('m'), lParam);
                     break;
 
                 default:
@@ -1156,7 +1169,7 @@
                 SetFocus(hWnd);
 
                 if (debug)
-                   show_debug(&calc, "After WM_CHAR", wParam, lParam);
+                   show_debug(&calc, TEXT("After WM_CHAR"), wParam, lParam);
 
                 return 0;
 
@@ -1172,33 +1185,33 @@
 
     // initialize keys lut for validating keystrokes in various number bases
 
-    for (i='0';i<='9';i++) {
+    for (i=TEXT('0');i<=TEXT('9');i++) {
         keys[NBASE_HEX][i]       = 1;
         keys[NBASE_DECIMAL][i]   = 1;
 
-        if (i <= '7')
+        if (i <= TEXT('7'))
             keys[NBASE_OCTAL][i]  = 1;
 
-        if (i <= '1')
+        if (i <= TEXT('1'))
             keys[NBASE_BINARY][i] = 1;
     }
 
-    for (i='a';i<='f';i++)
+    for (i=TEXT('a');i<=TEXT('f');i++)
         keys[NBASE_HEX][i] = 1;
 
-    for (i='A';i<='F';i++)
+    for (i=TEXT('A');i<=TEXT('F');i++)
         keys[NBASE_HEX][i] = 1;
 }
 
 void InitMenus(HINSTANCE hInst)
 {
-    if (!(menus[MENU_STD]   = LoadMenu(hInst,"MAIN_MENU")))
+    if (!(menus[MENU_STD]   = LoadMenu(hInst,TEXT("MAIN_MENU"))))
         exit(1);
 
-    if (!(menus[MENU_SCIMS] = LoadMenu(hInst,"SCIMS_MENU")))
+    if (!(menus[MENU_SCIMS] = LoadMenu(hInst,TEXT("SCIMS_MENU"))))
         exit(1);
 
-    if (!(menus[MENU_SCIWS] = LoadMenu(hInst,"SCIWS_MENU")))
+    if (!(menus[MENU_SCIWS] = LoadMenu(hInst,TEXT("SCIWS_MENU"))))
         exit(1);
 
     CheckMenuItem(menus[MENU_STD], IDM_MODE_STANDARD, MF_CHECKED);
@@ -1264,11 +1277,11 @@
         calc->value         = 0;
         calc->memory        = 0;
         calc->displayMode   = 0;
-        calc->buffer[0]     = '\0';
-        strcpy(calc->display, "0.");
+        calc->buffer[0]     = TEXT('\0');
+        _tcscpy(calc->display, TEXT("0."));
 
         calc->err           = 0;
-        calc->next          = '\0';
+        calc->next          = TEXT('\0');
 
         calc->wordSize      = WORDSIZE_QWORD;
         calc->invMode       = 0;
@@ -1284,7 +1297,7 @@
         skipy = CALC_STANDARD_MARGIN_TOP + CALC_EDIT_HEIGHT;
 
         calc->cb[0].id       = 0;
-        strcpy(calc->cb[0].label,"FILLER");
+        _tcscpy(calc->cb[0].label,TEXT("FILLER"));
         calc->cb[0].color    = CALC_COLOR_BLUE;
         calc->cb[0].r.left   = skipx + 4;
         calc->cb[0].r.top    = skipy + 2;
@@ -1295,7 +1308,7 @@
         skipx = SZ_FILLER_X + MARGIN_STANDARD_BIG_X + 11;
 
         calc->cb[1].id       = ID_CALC_BACKSPACE;
-        LoadString( hInst, IDS_BTN_BACKSPACE, calc->cb[1].label, sizeof(calc->cb[1].label));
+        LoadString( hInst, IDS_BTN_BACKSPACE, calc->cb[1].label, sizeof(calc->cb[1].label) / sizeof(calc->cb[1].label[0]));
         calc->cb[1].color    = CALC_COLOR_RED;
         calc->cb[1].r.left   = skipx;
         calc->cb[1].r.top    = skipy;
@@ -1306,7 +1319,7 @@
         skipx += SZ_BIGBTN_X + MARGIN_SMALL_X;
 
         calc->cb[2].id       = ID_CALC_CLEAR_ENTRY;
-        LoadString( hInst, IDS_BTN_CLEAR_ENTRY, calc->cb[2].label, sizeof(calc->cb[2].label));
+        LoadString( hInst, IDS_BTN_CLEAR_ENTRY, calc->cb[2].label, sizeof(calc->cb[2].label) / sizeof(calc->cb[2].label[0]));
         calc->cb[2].color    = CALC_COLOR_RED;
         calc->cb[2].r.left   = skipx;
         calc->cb[2].r.top    = skipy;
@@ -1317,7 +1330,7 @@
         skipx += SZ_BIGBTN_X + MARGIN_SMALL_X;
 
         calc->cb[3].id       = ID_CALC_CLEAR_ALL;
-        LoadString( hInst, IDS_BTN_CLEAR_ALL, calc->cb[3].label, sizeof(calc->cb[3].label));
+        LoadString( hInst, IDS_BTN_CLEAR_ALL, calc->cb[3].label, sizeof(calc->cb[3].label) / sizeof(calc->cb[3].label[0]));
         calc->cb[3].color    = CALC_COLOR_RED;
         calc->cb[3].r.left   = skipx;
         calc->cb[3].r.top    = skipy;
@@ -1331,7 +1344,7 @@
         skipy += SZ_BIGBTN_Y + MARGIN_BIG_Y;
 
         calc->cb[4].id       = ID_CALC_MEM_CLEAR;
-        LoadString( hInst, IDS_BTN_MEM_CLEAR, calc->cb[4].label, sizeof(calc->cb[4].label));
+        LoadString( hInst, IDS_BTN_MEM_CLEAR, calc->cb[4].label, sizeof(calc->cb[4].label) / sizeof(calc->cb[4].label[0]));
         calc->cb[4].color    = CALC_COLOR_RED;
         calc->cb[4].r.left   = skipx;
         calc->cb[4].r.top    = skipy;
@@ -1342,7 +1355,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_STANDARD_BIG_X;
 
         calc->cb[5].id       = ID_CALC_SEVEN;
-        strcpy(calc->cb[5].label,"7");
+        _tcscpy(calc->cb[5].label,TEXT("7"));
         calc->cb[5].color    = CALC_COLOR_BLUE;
         calc->cb[5].r.left   = skipx;
         calc->cb[5].r.top    = skipy;
@@ -1353,7 +1366,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[6].id       = ID_CALC_EIGHT;
-        strcpy(calc->cb[6].label,"8");
+        _tcscpy(calc->cb[6].label,TEXT("8"));
         calc->cb[6].color    = CALC_COLOR_BLUE;
         calc->cb[6].r.left   = skipx;
         calc->cb[6].r.top    = skipy;
@@ -1364,7 +1377,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[7].id       = ID_CALC_NINE;
-        strcpy(calc->cb[7].label,"9");
+        _tcscpy(calc->cb[7].label,TEXT("9"));
         calc->cb[7].color    = CALC_COLOR_BLUE;
         calc->cb[7].r.left   = skipx;
         calc->cb[7].r.top    = skipy;
@@ -1375,7 +1388,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[8].id       = ID_CALC_DIVIDE;
-        strcpy(calc->cb[8].label,"/");
+        _tcscpy(calc->cb[8].label,TEXT("/"));
         calc->cb[8].color    = CALC_COLOR_RED;
         calc->cb[8].r.left   = skipx;
         calc->cb[8].r.top    = skipy;
@@ -1386,7 +1399,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[9].id       = ID_CALC_SQRT;
-        LoadString( hInst, IDS_BTN_SQRT, calc->cb[9].label, sizeof(calc->cb[9].label));
+        LoadString( hInst, IDS_BTN_SQRT, calc->cb[9].label, sizeof(calc->cb[9].label) / sizeof(calc->cb[9].label[0]));
         calc->cb[9].color    = CALC_COLOR_BLUE;
         calc->cb[9].r.left   = skipx;
         calc->cb[9].r.top    = skipy;
@@ -1400,7 +1413,7 @@
         skipy += SZ_MEDBTN_Y + MARGIN_SMALL_Y;
 
         calc->cb[10].id       = ID_CALC_MEM_RECALL;
-        LoadString( hInst, IDS_BTN_MEM_RECALL, calc->cb[10].label, sizeof(calc->cb[10].label));
+        LoadString( hInst, IDS_BTN_MEM_RECALL, calc->cb[10].label, sizeof(calc->cb[10].label) / sizeof(calc->cb[10].label[0]));
         calc->cb[10].color    = CALC_COLOR_RED;
         calc->cb[10].r.left   = skipx;
         calc->cb[10].r.top    = skipy;
@@ -1411,7 +1424,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_STANDARD_BIG_X;
 
         calc->cb[11].id       = ID_CALC_FOUR;
-        strcpy(calc->cb[11].label,"4");
+        _tcscpy(calc->cb[11].label,TEXT("4"));
         calc->cb[11].color    = CALC_COLOR_BLUE;
         calc->cb[11].r.left   = skipx;
         calc->cb[11].r.top    = skipy;
@@ -1422,7 +1435,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[12].id       = ID_CALC_FIVE;
-        strcpy(calc->cb[12].label,"5");
+        _tcscpy(calc->cb[12].label,TEXT("5"));
         calc->cb[12].color    = CALC_COLOR_BLUE;
         calc->cb[12].r.left   = skipx;
         calc->cb[12].r.top    = skipy;
@@ -1433,7 +1446,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[13].id       = ID_CALC_SIX;
-        strcpy(calc->cb[13].label,"6");
+        _tcscpy(calc->cb[13].label,TEXT("6"));
         calc->cb[13].color    = CALC_COLOR_BLUE;
         calc->cb[13].r.left   = skipx;
         calc->cb[13].r.top    = skipy;
@@ -1444,7 +1457,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[14].id       = ID_CALC_MULTIPLY;
-        strcpy(calc->cb[14].label,"*");
+        _tcscpy(calc->cb[14].label,TEXT("*"));
         calc->cb[14].color    = CALC_COLOR_RED;
         calc->cb[14].r.left   = skipx;
         calc->cb[14].r.top    = skipy;
@@ -1455,7 +1468,7 @@
         skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
 
         calc->cb[15].id       = ID_CALC_PERCENT;
-        strcpy(calc->cb[15].label,"%");
+        _tcscpy(calc->cb[15].label,TEXT("%"));
         calc->cb[15].color    = CALC_COLOR_BLUE;
         calc->cb[15].r.left   = skipx;
         calc->cb[15].r.top    = skipy;
@@ -1469,7 +1482,7 @@
         skipy += SZ_MEDBTN_Y + MARGIN_SMALL_Y;
 
         calc->cb[16].id       = ID_CALC_MEM_STORE;
-        LoadString( hInst, IDS_BTN_MEM_STORE, calc->cb[16].label, sizeof(calc->cb[16].label));
+        LoadString( hInst, IDS_BTN_MEM_STORE, calc->cb[16].label, sizeof(calc->cb[16].label) / sizeof(calc->cb[16].label[0]));
         calc->cb[16].color    = CALC_COLOR_RED;
[truncated at 1000 lines; 1910 more skipped]