|
|
//#ifdef WIN
/* BabakJ: The stuff in this ifdef is hack for using \\popcorn env */ //#define NOCOMM
/* #define _NTDEF_ to get NT defs, i.e. WORD unsigned short, not int */
#include <windows.h>
#include <port1632.h>
// Babakj: Set DEBUG based on DBG (1 or 0) to do FREE or CHECKED builds of Solitaire
#if DBG
#define DEBUG
#endif
/* #include <winkrnl.h> To define OFSTRUCT */ /* OpenFile() Structure */ //typedef struct tagOFSTRUCT
// {
// BYTE cBytes;
// BYTE fFixedDisk;
// WORD nErrCode;
// BYTE reserved[4];
// BYTE szPathName[128];
// } OFSTRUCT;
//typedef OFSTRUCT *POFSTRUCT;
//typedef OFSTRUCT NEAR *NPOFSTRUCT;
//typedef OFSTRUCT FAR *LPOFSTRUCT;
//#define OF_CREATE 0x1000
//#define OF_WRITE 0x0001
/* End if stuff taken from Winkrnl.h */ //#endif
#include <stdlib.h>
#include <time.h>
#include "std.h"
#include "crd.h"
#include "col.h"
#include "undo.h"
#include "solid.h"
#include "game.h"
#include "soldraw.h"
#include "back.h"
#include "stat.h"
#include "klond.h"
#include "debug.h"
// key in the registry to store the solitaire settings.
#define SOLKEYNAME TEXT("Software\\Microsoft\\Solitaire")
VOID ChangeBack( INT ); VOID WriteIniFlags( INT ); BOOL FYesNoAlert( INT ); VOID DoOptions( VOID ); VOID DoBacks( VOID ); VOID NewGame( BOOL, BOOL ); BOOL APIENTRY cdtDraw( HDC, INT, INT, INT, INT, DWORD ); BOOL APIENTRY cdtDrawExt(HDC, INT, INT, INT, INT, INT, INT, DWORD); BOOL FCreateStat( VOID ); BOOL FSetDrag( BOOL ); BOOL FInitGm( VOID ); BOOL APIENTRY cdtInit( INT FAR *, INT FAR * ); typedef INT (*COLCLSCREATEFUNC)(); COLCLS *PcolclsCreate(INT tcls, COLCLSCREATEFUNC lpfnColProc, DX dxUp, DY dyUp, DX dxDn, DY dyDn, INT dcrdUp, INT dcrdDn); COL *PcolCreate(COLCLS *pcolcls, X xLeft, Y yTop, X xRight, Y yBot, INT icrdMax); VOID SwapCards(CRD *pcrd1, CRD *pcrd2); BOOL FCrdRectIsect(CRD *pcrd, RC *prc); BOOL FRectIsect(RC *prc1, RC *prc2); BOOL FPtInCrd(CRD *pcrd, PT pt);
VOID DrawCard(CRD *pcrd); VOID DrawCardPt(CRD *pcrd, PT *ppt); VOID DrawBackground(X xLeft, Y yTop, X xRight, Y yBot); VOID DrawBackExcl(COL *pcol, PT *ppt); VOID EraseScreen(VOID); VOID OOM( VOID );
HDC HdcSet(HDC hdc, X xOrg, Y yOrg); extern X xOrgCur; extern Y yOrgCur;
#define AssertHdcCur() Assert(hdcCur != NULL)
BOOL FGetHdc( VOID ); VOID ReleaseHdc( VOID );
typedef union { struct _ini { BOOL fStatusBar : 1; BOOL fTimedGame : 1; BOOL fOutlineDrag : 1; BOOL fDrawThree : 1; unsigned fSMD: 2; BOOL fKeepScore : 1; BOOL unused:8; } grbit; DWORD w; } INI;
/* WriteIniFlags flags */
#define wifOpts 0x01
#define wifBitmap 0x02
#define wifBack 0x04
#define wifAll wifOpts|wifBitmap|wifBack
/* externals */ /* sol.c */ extern TCHAR szAppName[]; // name of this application (solitaire)
extern TCHAR szScore[]; // title 'score:' for internationalization
extern HWND hwndApp; // handle to main window of app
extern HANDLE hinstApp; // handle to instance of app
extern BOOL fBW; // true if on monochrome video (not NT!)
extern HBRUSH hbrTable; // handle to brush of table top
extern LONG rgbTable; // RGB value of table top
extern INT modeFaceDown; // back of cards bmp id
extern BOOL fIconic; // true if app is iconic
extern INT dyChar; // tmHeight for textout
extern INT dxChar; // tmMaxCharWidth for textout
extern GM* pgmCur; // current game
extern DEL delCrd; extern DEL delScreen; extern PT ptNil; // no previous pt (nil)
#define dxCrd delCrd.dx
#define dyCrd delCrd.dy
#define dxScreen delScreen.dx
#define dyScreen delScreen.dy
extern RC rcClient; // client rectangle after resize
extern INT igmCur; // the current game #, srand seeded with this
#ifdef DEBUG
extern BOOL fScreenShots; // ???
#endif
extern HDC hdcCur; // current HDC to draw on (!)
extern INT usehdcCur; // hdcCur use count
extern X xOrgCur; extern Y yOrgCur;
extern TCHAR szOOM[50]; // "out of memory" error message
extern BOOL fStatusBar; // true if we are to show status
extern BOOL fTimedGame; // true if we are to time game
extern BOOL fKeepScore; // true if keeping score (vegas only)
extern SMD smd; // Score MoDe (std, vegas, none)
extern INT ccrdDeal; extern BOOL fOutlineDrag;
extern BOOL fHalfCards; extern int xCardMargin;
/* stat.c */ extern HWND hwndStat; // hwnd of status window
/* col.c */ extern BOOL fMegaDiscardHack; // true if called from DiscardMove
extern MOVE move; // move data
/* klond.c */ BOOL PositionCols(void); extern BOOL fKlondWinner; // true if we needn't round card corners
#ifdef DEBUG
WORD ILogMsg( VOID *, INT, WPARAM, LPARAM, BOOL ); VOID LogMsgResult( INT, LRESULT ); #endif
|