This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/samples/win/life/life.h

142 lines
4.8 KiB
C

#include "windows.h"
#include "rules.h"
#include "menu.h"
BOOL GetFileName( char *name, BOOL type, char *ext, char *buff, int len );
#if defined( __WINDOWS_386__ ) || defined( __NT__ )
#define _EXPORT
#define _FAR
#define _free free
#define _malloc malloc
#define _hfree free
#define _halloc( a,b ) malloc( a * b )
#define _memset memset
#define _memcpy memcpy
#else
#define _EXPORT __export
#define _FAR __far
#define _free _ffree
#define _malloc _fmalloc
#define _hfree hfree
#define _halloc(a,b) halloc(a,b)
#define _memset _fmemset
#define _memcpy _fmemcpy
#endif
#define ONE_SECOND 1000
#define BUFLEN 30
#define TIMER_ID 1
#define BUFSIZE 256
typedef int pixels;
/*
* Define our cell array data types.
* NB: The macros let us change the implementation
*/
typedef struct {
unsigned char alive : 1;
unsigned char drawn : 1;
unsigned char next_alive : 1;
} cell_type;
typedef cell_type _FAR *cell_ptr;
typedef cell_type _FAR *cell_ydim;
typedef cell_ydim *cell_array;
#define ArrayPointer( a, x, y ) (&((a)[ (x)+1 ][ (y)+1 ]))
#define CellPointer( x, y ) ArrayPointer( CellArray, x, y )
#ifdef DEFINE_GLOBAL_VARS
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL pixels WindowWidth; /* window width in pixels */
GLOBAL pixels WindowHeight; /* window height in pixels */
GLOBAL pixels ScreenHeight; /* screen height in pixels */
GLOBAL pixels ArraySizeX; /* The X dimension of the cell array */
GLOBAL pixels ArraySizeY; /* The Y dimension of the cell array */
GLOBAL HANDLE ThisInst; /* Our instance handle */
GLOBAL HWND WinHandle; /* Out window handle */
GLOBAL int Mode; /* (pause, resume, single step ) */
GLOBAL int MouseMode; /* (select, flip, single step) */
GLOBAL BOOL Births[9]; /* Birth rules */
GLOBAL BOOL Deaths[9]; /* Death rules */
GLOBAL long Generation; /* generation counter */
GLOBAL long Population; /* population counter */
GLOBAL int NumberPatterns; /* The number of patterns in &Pattern */
GLOBAL char Buffer[BUFSIZE];/* Utility buffer */
GLOBAL BOOL DrawGrid; /* Do we draw a grid ? */
GLOBAL BOOL IsAnIcon; /* Are we an icon? */
GLOBAL BITMAP BitInfo; /* Info re: our cell bitmap */
GLOBAL HPEN Pen; /* A Black pen */
GLOBAL HBRUSH Brush; /* A Hollow brush */
GLOBAL cell_array CellArray; /* The array of cells */
GLOBAL BOOL CurvedSpace; /* Is space curved? (edges wrap) */
/* From ARRAY.C */
extern BOOL ReSizeArray( pixels width, pixels height, WORD type );
extern void WrapAround( pixels *x, pixels *y );
extern void Clear( void );
extern void Randomize( void );
extern void FreeArray( cell_array junk );
extern void NextGeneration( void );
/* From BITMAPS.C */
extern void BlitBitMap( HDC dc, pixels x, pixels y );
extern void FiniBitMap( void );
extern void InitBitMap( void );
extern void LoadNewBitmap( void );
extern void NewBitMap( void );
extern void UnBlitBitMap( HDC dc, pixels x, pixels y );
/* From LIFE.C */
extern BOOL NoMemory( void );
extern BOOL TurnOffCell( HDC dc, cell_ptr cell, pixels x, pixels y );
extern BOOL TurnOnCell( HDC dc, cell_ptr cell, pixels x, pixels y );
extern void Error( char *str );
extern void FlushMouse( void );
extern void SetCaption( void );
/* from MOUSE.C */
extern BOOL EndSelect( pixels x, pixels y );
extern BOOL MoveSelect( unsigned state, pixels x, pixels y );
extern BOOL SelectOn( void );
extern BOOL StartSelect( pixels x, pixels y );
extern void FlipPattern( unsigned state, pixels x, pixels y );
extern void FlipSelect( void );
extern void GetSelectedCoords( pixels *x1, pixels *x2, pixels *y1, pixels *y2 );
extern void SelectOff( void );
/* From PATTERNS.C */
extern BOOL IsCurrPattern( int i );
extern BOOL ReadAPatternFile( char *name, int i );
extern BOOL ReadPatterns( void );
extern void CreatePatternMenu( void );
extern void DrawPattern( pixels pixel_x, pixels pixel_y, BOOL erase );
extern void FreePatterns( void );
extern void LoadNewPattern( void );
extern void ReflectAboutXequalY( char *pattern );
extern void ReflectAboutYAxis( char *pattern );
extern void SetCurrPattern( int i );
extern void TransformPatterns( void (*rtn)(char *) );
extern void WritePatternFile( void );
/* From TIMER.C */
extern BOOL InitTimer( void );
extern void CheckTimerRate( void );
extern void FiniTimer( void );
extern void NewTimer( void );
extern void RelinquishControl( void );
extern void TimerTurbo( void );