windows-nt/Source/XPSP1/NT/shell/osshell/games/sol/sol.h

185 lines
4.8 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//#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