/**********/ /* util.c */ /**********/ #define _WINDOWS #include #include #include "snake.h" #include "res.h" #include "pref.h" #include "util.h" #include "string.h" #include "stdio.h" #include "stdlib.h" #include "dos.h" extern INT dypBorder; extern INT dxpBorder; extern INT dypCaption; extern INT dypMenu; extern CHAR szClass[cchNameMax]; extern HANDLE hInst; extern HWND hwndMain; extern HMENU hMenu; extern BOOL fEGA; extern PREF Preferences; VOID APIENTRY AboutWEP(HWND hwnd, HICON hicon, LPSTR lpTitle, LPSTR lpCredit); /****** R N D ******/ /* Return a random number between 0 and rndMax */ INT Rnd(INT rndMax) { return (rand() % rndMax); } /****** R E P O R T E R R ******/ /* Report and error and exit */ VOID ReportErr(WORD idErr) { CHAR szMsg[cchMsgMax]; CHAR szMsgTitle[cchMsgMax]; if (idErr < ID_ERR_MAX) LoadString(hInst, idErr, szMsg, cchMsgMax); else { LoadString(hInst, ID_ERR_UNKNOWN, szMsgTitle, cchMsgMax); wsprintf(szMsg, szMsgTitle, idErr); } LoadString(hInst, ID_ERR_TITLE, szMsgTitle, cchMsgMax); MessageBox(NULL, szMsg, szMsgTitle, MB_OK | MB_ICONHAND); } /****** L O A D S Z ******/ VOID LoadSz(WORD id, CHAR * sz) { if (LoadString(hInst, id, (LPSTR) sz, cchMsgMax) == 0) ReportErr(1001); } /****** I N I T C O N S T ******/ VOID InitConst(VOID) { srand(LOWORD(GetCurrentTime())); LoadSz(ID_GAMENAME, szClass); fEGA = GetSystemMetrics(SM_CYSCREEN) == 350; dypCaption = GetSystemMetrics(SM_CYCAPTION) + 1; dypMenu = GetSystemMetrics(SM_CYMENU) + 1; dypBorder = GetSystemMetrics(SM_CYBORDER) + 1; dxpBorder = GetSystemMetrics(SM_CXBORDER) + 1; } /* * * * * * M E N U S * * * * * */ /****** C H E C K E M ******/ VOID CheckEm(WORD idm, BOOL fCheck) { CheckMenuItem(hMenu, idm, fCheck ? MF_CHECKED : MF_UNCHECKED); } /****** S E T M E N U B A R ******/ VOID SetMenuBar(INT fActive) { Preferences.fMenu = fActive; FixMenus(); SetMenu(hwndMain, FMenuOn() ? hMenu : NULL); AdjustWindow(fResize); } /****** D O A B O U T ******/ VOID DoAbout(VOID) { CHAR szVersion[cchMsgMax]; CHAR szCredit[cchMsgMax]; LoadSz(ID_MSG_VERSION, szVersion); LoadSz(ID_MSG_CREDIT, szCredit); AboutWEP(hwndMain, LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON_MAIN)), szVersion, szCredit); } /****** D O H E L P ******/ VOID DoHelp(UINT wCommand, ULONG_PTR lParam) { CHAR szHelpFile[cchMaxPathname]; CHAR * pch; pch = szHelpFile + GetModuleFileName(hInst, szHelpFile, cchMaxPathname); if ( ((pch-szHelpFile) > 4) && (*(pch-4) == '.') ) pch -= 4; lstrcpy((LPSTR) pch, (LPSTR) ".HLP"); WinHelp(hwndMain, szHelpFile, wCommand, lParam); } /****** G E T D L G I N T ******/ INT GetDlgInt(HWND hDlg, INT dlgID, INT numLo, INT numHi) { INT num; BOOL fFlag; num = GetDlgItemInt(hDlg, dlgID, &fFlag, fFalse); if (num < numLo) num = numLo; else if (num > numHi) num = numHi; return num; }