DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦90db698d2⟧ TextFile

    Length: 16657 (0x4111)
    Types: TextFile
    Names: »tile.c.orig«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/X/Dragon/tile.c.orig« 

TextFile

/******************************************************************************
* Dragon - a version of Mah-Jongg for X Windows
*
* Author: Gary E. Barnes	March 1989
*
* tile.c - Deals with the individual Mah-Jongg tiles.
******************************************************************************/

#include "main.h"

/*--SEASONS */

extern XImage	spring;
extern XImage	summer;
extern XImage	fall;
extern XImage	winter;

/*--FLOWERS */

extern XImage	bamboo;
extern XImage	mum;
extern XImage	orchid;
extern XImage	plum;

/*--DRAGONS */

extern XImage	gdragon;
extern XImage	rdragon;
extern XImage	wdragon;

/*--WINDS */

extern XImage	east;
extern XImage	west;
extern XImage	north;
extern XImage	south;

/*--NUMBERS */

extern XImage	one;
extern XImage	two;
extern XImage	three;
extern XImage	four;
extern XImage	five;
extern XImage	six;
extern XImage	seven;
extern XImage	eight;
extern XImage	nine;

/*--OTHER */

extern XImage	bam;
extern XImage	crak;
extern XImage	dot;

extern XImage_Init Sizes[5][28];

static int	Tile_X11	= 28 / 2;		/* one column */
static int	Tile_X21	= 28 / 3;		/* two columns */
static int	Tile_X22	= 28 * 2 / 3;
static int	Tile_X31	= 28 / 4;		/* three columns */
static int	Tile_X32	= 28 * 2 / 4;
static int	Tile_X33	= 28 * 3 / 4;

static int	Tile_Y11	= 32 / 2;		/* one row */
static int	Tile_Y21	= 32 / 3;		/* two rows */
static int	Tile_Y22	= 32 * 2 / 3;
static int	Tile_Y31	= 32 / 5;		/* three rows */
static int	Tile_Y32	= 32 * 2 / 5;
static int	Tile_Y33	= 32 * 3 / 5;

static int	Number_X	= 28 - 7;
static int	Number_Y	= 0;
static int	SubTile_X	= 7 / 2;
static int	SubTile_Y	= 8 / 2;

\f


static void Setup_Image( image, bits, width, height )
     XImage	*image;
     char	*bits;
     int	 width;
     int	 height;
/******************************************************************************
*   image	- Specifies the XImage object to initialize
*   bits	- Specifies the image data
*   width	- Specifies the width of the image
*   height	- Specifies the height of the image
*
* Called to init an XImage so that it points at a particular bitmap image.
******************************************************************************/
{

    image->width = width;
    image->height = height;
    image->depth = 1;
    image->xoffset = 0;
    image->format = XYBitmap;
    image->data = bits;
    image->byte_order = LSBFirst;
    image->bitmap_bit_order = LSBFirst;
    image->bitmap_unit = 8;
    image->bitmap_pad = 8;
    image->bytes_per_line = (width + 7) / 8;

} /* Setup_Image */

\f


void Configure_Tiles( size )
     int	size;
/******************************************************************************
*   size	- Specifies the tile size to use; 1..5
*
* Called when the Board receives a ConfigureNotify event.  We check to see if
* the size of the board/tiles have changed.  If so then we reconfigure the
* images of the tiles.
******************************************************************************/
{
    XImage_Init	*table;
    int		 w;
    int		 h;

/*--Make sure that our caller is rational. */

    if (size < 1 || size > 5) {
	fprintf( stderr, "Bad size given to Configure_Tiles in tile.c [%d].\n",
		 size );
	size = 1;
    }

/*--Set up all of the various images. */

    for (table = &Sizes[size-1][0]; table->image != (XImage*)NULL; ++table) {
	Setup_Image( table->image, table->bits, table->width, table->height );
    }

/*--Set up the sub-tile positions. */

    w = spring.width;
    h = spring.height;

    Tile_X11	= w / 2;		/* one column */
    Tile_X21	= w / 3;		/* two columns */
    Tile_X22	= w - Tile_X21;
    Tile_X31	= w / 4;		/* three columns */
    while (Tile_X31 + bam.width/2 + bam.width*2 >= spring.width) {
	--Tile_X31;
    }
    Tile_X32	= Tile_X31 + bam.width;
    Tile_X33	= Tile_X32 + bam.width;

    Tile_Y11	= h / 2;		/* one row */
    Tile_Y21	= h / 3;		/* two rows */
    Tile_Y22	= h - Tile_Y21;
    Tile_Y31	= h * 2 / 5;		/* three rows */
    while (Tile_Y31 + bam.height/2 + bam.height*2 >= spring.height) {
	--Tile_Y31;
    }
    Tile_Y32	= Tile_Y31 + bam.height;
    Tile_Y33	= Tile_Y32 + bam.height;

    Number_X	= w - one.width - 1;
    Number_Y	= 1;
    SubTile_X	= bam.width  / 2;
    SubTile_Y	= bam.height / 2;

} /* Configure_Tiles */

\f


static void Draw_Image( image, x, y )
     XImage	*image;
     int	 x;
     int	 y;
/******************************************************************************
* Do an XPutImage on the image.
******************************************************************************/
{
    XPutImage( XtDisplay(Board), XtWindow(Board), Normal_GC, image,
	       0, 0, x, y,
	       (unsigned int)image->width, (unsigned int)image->height );
} /* Draw_Image */

\f


static void Draw_Blank( x, y )
     int	 x;
     int	 y;
/******************************************************************************
* Draw an empty tile; our caller will fill it in with little images.
******************************************************************************/
{
    XFillRectangle( XtDisplay(Board), XtWindow(Board), Reverse_GC,
		    x, y,
		    (unsigned int)spring.width, (unsigned int)spring.height );
} /* Draw_Blank */

\f


static void Draw_Number( image, x, y )
     XImage	*image;
     int	 x;
     int	 y;
/******************************************************************************
* Called to draw the number in the upper right corner of a numbered tile.
******************************************************************************/
{
    XPutImage( XtDisplay(Board), XtWindow(Board), Over_GC, image,
	       0, 0, x + Number_X, y + Number_Y,
	       (unsigned int)image->width, (unsigned int)image->height );
} /* Draw_Number */

\f


void Draw_Spring( x, y )
     int	x;
     int	y;
{
    Draw_Image( &spring, x, y );
} /* Draw_Spring */

void Draw_Summer( x, y )
     int	x;
     int	y;
{
    Draw_Image( &summer, x, y );
} /* Draw_Summer */

void Draw_Fall( x, y )
     int	x;
     int	y;
{
    Draw_Image( &fall, x, y );
} /* Draw_Fall */

void Draw_Winter( x, y )
     int	x;
     int	y;
{
    Draw_Image( &winter, x, y );
} /* Draw_Winter */

\f


void Draw_Bamboo( x, y )
     int	x;
     int	y;
{
    Draw_Image( &bamboo, x, y );
} /* Draw_Bamboo */

void Draw_Mum( x, y )
     int	x;
     int	y;
{
    Draw_Image( &mum, x, y );
} /* Draw_Mum */

void Draw_Orchid( x, y )
     int	x;
     int	y;
{
    Draw_Image( &orchid, x, y );
} /* Draw_Orchid */

void Draw_Plum( x, y )
     int	x;
     int	y;
{
    Draw_Image( &plum, x, y );
} /* Draw_Plum */

\f


void Draw_GDragon( x, y )
     int	x;
     int	y;
{
    Draw_Image( &gdragon, x, y );
} /* Draw_GDragon */

void Draw_RDragon( x, y )
     int	x;
     int	y;
{
    Draw_Image( &rdragon, x, y );
} /* Draw_RDragon */

void Draw_WDragon( x, y )
     int	x;
     int	y;
{
    Draw_Image( &wdragon, x, y );
} /* Draw_WDragon */

\f


void Draw_East( x, y )
     int	x;
     int	y;
{
    Draw_Image( &east, x, y );
} /* Draw_East */

void Draw_West( x, y )
     int	x;
     int	y;
{
    Draw_Image( &west, x, y );
} /* Draw_West */

void Draw_North( x, y )
     int	x;
     int	y;
{
    Draw_Image( &north, x, y );
} /* Draw_North */

void Draw_South( x, y )
     int	x;
     int	y;
{
    Draw_Image( &south, x, y );
} /* Draw_South */

\f


void Draw_Bam1( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X11, by + Tile_Y11 );

    Draw_Number( &one, x, y );

} /* Draw_Bam1 */

void Draw_Bam2( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X11, by + Tile_Y21 );
    Draw_Image( &bam, bx + Tile_X11, by + Tile_Y22 );

    Draw_Number( &two, x, y );

} /* Draw_Bam2 */

void Draw_Bam3( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X11, by + Tile_Y21 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y22 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y22 );

    Draw_Number( &three, x, y );

} /* Draw_Bam3 */

void Draw_Bam4( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y21 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y21 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y22 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y22 );

    Draw_Number( &four, x, y );

} /* Draw_Bam4 */

void Draw_Bam5( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X11, by + Tile_Y31 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y32 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y33 );

    Draw_Number( &five, x, y );

} /* Draw_Bam5 */

void Draw_Bam6( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y31 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y31 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y32 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y33 );

    Draw_Number( &six, x, y );

} /* Draw_Bam6 */

void Draw_Bam7( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y31 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y31 );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y32 );

    Draw_Image( &bam, bx + Tile_X31, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X32, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X33, by + Tile_Y33 );

    Draw_Number( &seven, x, y );

} /* Draw_Bam7 */

void Draw_Bam8( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X21, by + Tile_Y31 );
    Draw_Image( &bam, bx + Tile_X22, by + Tile_Y31 );

    Draw_Image( &bam, bx + Tile_X31, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X32, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X33, by + Tile_Y32 );

    Draw_Image( &bam, bx + Tile_X31, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X32, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X33, by + Tile_Y33 );

    Draw_Number( &eight, x, y );

} /* Draw_Bam8 */

void Draw_Bam9( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &bam, bx + Tile_X31, by + Tile_Y31 );
    Draw_Image( &bam, bx + Tile_X32, by + Tile_Y31 );
    Draw_Image( &bam, bx + Tile_X33, by + Tile_Y31 );

    Draw_Image( &bam, bx + Tile_X31, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X32, by + Tile_Y32 );
    Draw_Image( &bam, bx + Tile_X33, by + Tile_Y32 );

    Draw_Image( &bam, bx + Tile_X31, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X32, by + Tile_Y33 );
    Draw_Image( &bam, bx + Tile_X33, by + Tile_Y33 );

    Draw_Number( &nine, x, y );

} /* Draw_Bam9 */

\f


void Draw_Dot1( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X11, by + Tile_Y11 );

    Draw_Number( &one, x, y );

} /* Draw_Dot1 */

void Draw_Dot2( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X11, by + Tile_Y21 );
    Draw_Image( &dot, bx + Tile_X11, by + Tile_Y22 );

    Draw_Number( &two, x, y );

} /* Draw_Dot2 */

void Draw_Dot3( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X11, by + Tile_Y21 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y22 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y22 );

    Draw_Number( &three, x, y );

} /* Draw_Dot3 */

void Draw_Dot4( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y21 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y21 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y22 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y22 );

    Draw_Number( &four, x, y );

} /* Draw_Dot4 */

void Draw_Dot5( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X11, by + Tile_Y31 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y32 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y33 );

    Draw_Number( &five, x, y );

} /* Draw_Dot5 */

void Draw_Dot6( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y31 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y31 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y32 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y33 );

    Draw_Number( &six, x, y );

} /* Draw_Dot6 */

void Draw_Dot7( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y31 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y31 );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y32 );

    Draw_Image( &dot, bx + Tile_X31, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X32, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X33, by + Tile_Y33 );

    Draw_Number( &seven, x, y );

} /* Draw_Dot7 */

void Draw_Dot8( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X21, by + Tile_Y31 );
    Draw_Image( &dot, bx + Tile_X22, by + Tile_Y31 );

    Draw_Image( &dot, bx + Tile_X31, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X32, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X33, by + Tile_Y32 );

    Draw_Image( &dot, bx + Tile_X31, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X32, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X33, by + Tile_Y33 );

    Draw_Number( &eight, x, y );

} /* Draw_Dot8 */

void Draw_Dot9( x, y )
     int	x;
     int	y;
{
    int		bx = x - SubTile_X;
    int		by = y - SubTile_Y;

    Draw_Blank( x, y );

    Draw_Image( &dot, bx + Tile_X31, by + Tile_Y31 );
    Draw_Image( &dot, bx + Tile_X32, by + Tile_Y31 );
    Draw_Image( &dot, bx + Tile_X33, by + Tile_Y31 );

    Draw_Image( &dot, bx + Tile_X31, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X32, by + Tile_Y32 );
    Draw_Image( &dot, bx + Tile_X33, by + Tile_Y32 );

    Draw_Image( &dot, bx + Tile_X31, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X32, by + Tile_Y33 );
    Draw_Image( &dot, bx + Tile_X33, by + Tile_Y33 );

    Draw_Number( &nine, x, y );

} /* Draw_Dot9 */

\f


void Draw_Crak1( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &one, x, y );
} /* Draw_Crak1 */

void Draw_Crak2( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &two, x, y );
} /* Draw_Crak2 */

void Draw_Crak3( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &three, x, y );
} /* Draw_Crak3 */

void Draw_Crak4( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &four, x, y );
} /* Draw_Crak4 */

void Draw_Crak5( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &five, x, y );
} /* Draw_Crak5 */

void Draw_Crak6( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &six, x, y );
} /* Draw_Crak6 */

void Draw_Crak7( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &seven, x, y );
} /* Draw_Crak7 */

void Draw_Crak8( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &eight, x, y );
} /* Draw_Crak8 */

void Draw_Crak9( x, y )
     int	x;
     int	y;
{
    Draw_Image( &crak, x, y );
    Draw_Number( &nine, x, y );
} /* Draw_Crak9 */