home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
windows
/
hexcalc.zip
/
HEXCALC.C
< prev
next >
Wrap
Text File
|
1988-03-13
|
4KB
|
153 lines
#include <windows.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
long FAR PASCAL WndProc(HWND, unsigned, WORD, LONG);
int PASCAL WinMain(hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
HANDLE hInstance, hPrevInstance;
LPSTR lpszCmdLine;
int nCmdShow;
{
static char szAppName[] = "HexCalc";
HWND hWnd;
MSG msg;
WNDCLASS wndclass;
if (!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(hInstance, szAppName);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = COLOR_WINDOW + 1;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass(&wndclass))
return FALSE;
}
hWnd = CreateDialog(hInstance, szAppName, 0, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
void ShowNumber(hWnd, dwNumber)
HWND hWnd;
DWORD dwNumber;
{
char szBuffer[20];
SetDlgItemText(hWnd, VK_ESCAPE, strupr(ltoa(dwNumber, szBuffer, 16)));
}
DWORD CalcIt(dwFirstNum, nOperation, dwNum)
DWORD dwFirstNum, dwNum;
short nOperation;
{
switch(nOperation)
{
case '=' : return dwNum;
case '+' : return dwFirstNum + dwNum;
case '-' : return dwFirstNum - dwNum;
case '*' : return dwFirstNum * dwNum;
case '&' : return dwFirstNum & dwNum;
case '|' : return dwFirstNum | dwNum;
case '^' : return dwFirstNum ^ dwNum;
case '<' : return dwFirstNum << dwNum;
case '>' : return dwFirstNum >> dwNum;
case '/' : return dwNum ? dwFirstNum / dwNum : ULONG_MAX;
case '%' : return dwNum ? dwFirstNum % dwNum : ULONG_MAX;
default : return 0L;
}
}
long FAR PASCAL WndProc(hWnd, iMessage, wParam, lParam)
HWND hWnd;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
static BOOL bNewNumber = TRUE;
static DWORD dwNumber, dwFirstNum;
static short nOperation = '=';
HWND hButton;
switch(iMessage)
{
case WM_KEYDOWN:
if (wParam != VK_LEFT)
break;
wParam = VK_BACK;
case WM_CHAR:
if ((wParam = toupper(wParam)) == VK_RETURN)
wParam = '=';
if (hButton = GetDlgItem(hWnd, wParam))
{
SendMessage(hButton, BM_SETSTATE, 1, 0L);
SendMessage(hButton, BM_SETSTATE, 0, 0L);
}
else
{
MessageBeep(0);
break;
}
case WM_COMMAND:
SetFocus(hWnd);
if (wParam == VK_BACK)
ShowNumber(hWnd, dwNumber /= 16);
else if (wParam == VK_ESCAPE)
ShowNumber(hWnd, dwNumber = 0L);
else if (isxdigit(wParam))
{
if (bNewNumber)
{
dwFirstNum = dwNumber;
dwNumber = 0L;
}
bNewNumber = FALSE;
if (dwNumber <= ULONG_MAX >> 4)
ShowNumber(hWnd, dwNumber = 16 * dwNumber +
wParam - (isdigit(wParam) ? '0' : 'A' - 10));
else
MessageBeep(0);
}
else
{
if (!bNewNumber)
ShowNumber(hWnd, dwNumber =
CalcIt(dwFirstNum, nOperation, dwNumber));
bNewNumber = TRUE;
nOperation = wParam;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, iMessage, wParam, lParam);
}
return 0L;
}