home *** CD-ROM | disk | FTP | other *** search
- /*Filename: USERCODE.C */
- /*"CALC" Generated by WindowsMAKER */
- /*Author: Bill G. */
-
- #include <WINDOWS.H>
- #include "CALC.H"
- #include <limits.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
-
- BOOL bNewNumber = TRUE ;
- short operator = '=' ;
- DWORD dwNumber, dwFirstNum ;
-
- DWORD Calculate(DWORD,short,DWORD);
- void DisplayNumber(HWND,DWORD);
- BOOL CalcInput(HWND,WORD);
-
- /* Initialization procedure for class */
- BOOL BLD_MainClassClsInit(pWndCls)
- WNDCLASS *pWndCls;
- {
- /* Window extra bytes needed for private dialog class */
- pWndCls->cbWndExtra = DLGWINDOWEXTRA;
- return TRUE;
- }
-
- /* Initialization procedure for window */
- HWND BLD_MainWindowWndInit(pWndStyle,Coordinate,ppInfo)
- DWORD *pWndStyle;
- int Coordinate[];
- PSTR *ppInfo;
- {
- /* Let MS-Windows do all the work */
- return CreateDialog (hInst, "CALCULATOR", 0, NULL);
- }
-
- /* Procedure for processing WM_COMMAND (control) messages */
- long BLD_WM_COMMANDMsg(hWnd,message,wParam,lParam)
- HWND hWnd;
- unsigned message;
- WORD wParam;
- LONG lParam;
- {
- SetFocus(hWnd);
- CalcInput(hWnd,wParam);
- return 0L;
- }
-
- /* Procedure for processing keyboard input */
- long BLD_WM_CHARMsg(hWnd,message,wParam,lParam)
- HWND hWnd;
- unsigned message;
- WORD wParam;
- LONG lParam;
- {
- HWND hButton ;
- if ((wParam = toupper (wParam)) == VK_RETURN)
- wParam = '=' ;
-
- if (hButton = GetDlgItem (hWnd, wParam))
- {
- SendMessage (hButton, BM_SETSTATE, 1, 0L) ;
- SendMessage (hButton, BM_SETSTATE, 0, 0L) ;
- CalcInput(hWnd,wParam);
- }
- else
- MessageBeep (0) ;
- return 0L;
- }
-
-
- /* Sorting out the different types of input */
- BOOL CalcInput(hWnd,wButton)
- HWND hWnd;
- WORD wButton;
- {
-
- if (wButton == VK_ESCAPE) /* escape */
- DisplayNumber (hWnd, dwNumber = 0L) ;
-
- else if (isdigit (wButton)) /* digit */
- {
- if (bNewNumber)
- {
- dwFirstNum = dwNumber ;
- dwNumber = 0L ;
- }
- bNewNumber = FALSE ;
- if (dwNumber <= ULONG_MAX >> 4)
- DisplayNumber (hWnd, dwNumber = 10 * dwNumber + wButton- '0') ;
- else
- MessageBeep (0) ;
- }
-
- else /* operator */
- {
- if (!bNewNumber)
- DisplayNumber (hWnd, dwNumber =
- Calculate (dwFirstNum, operator, dwNumber)) ;
- bNewNumber = TRUE ;
- operator = wButton ;
- }
- return TRUE;
- }
-
- /* Perform calculation using the operator and numbers */
- DWORD Calculate (dwFirstNum, operator, dwNum)
- DWORD dwFirstNum, dwNum ;
- short operator ;
- {
- switch (operator)
- {
- case '=' : return dwNum ;
- case '+' : return dwFirstNum + dwNum ;
- case '-' : return dwFirstNum - dwNum ;
- case '*' : return dwFirstNum * dwNum ;
- case '/' : return dwNum ? dwFirstNum / dwNum : ULONG_MAX ;
- default : return 0L ;
- }
- }
-
- /* Display number in result (VK_ESCAPE) push button */
- void DisplayNumber (hWnd, dwNumber)
- HWND hWnd ;
- DWORD dwNumber ;
- {
- char szText [20] ;
- SetDlgItemText (hWnd, VK_ESCAPE, strupr (ltoa (dwNumber, szText, 10))) ;
- }
-
-