/***********************
 *					   *
 *	Digits for Fclock. *
 *					   *
 ***********************/

#include <exec/types.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include "digits.h"

#define Y 5
#define DOTX 63
#define DOTY 15


/**************************************************/
/* Arrays of co-ordinates, and border definitions */
/* to render the seven segment display digits. 	  */
/**************************************************/

/* Horizontal co-ords, and border structure. */
SHORT lthor_segment[]={ 2, 2, 4, 0, 14, 0, 16, 2 };
SHORT dkhor_segment[]={ 16, 2, 14, 4, 4, 4, 3, 3 };
struct Border hor_border_seg=
	{ 0, 0, 1, 0, JAM1, 4, dkhor_segment, NULL };
struct Border hor_border2=
	{ 0, 0, 2, 0, JAM1, 4, lthor_segment, &hor_border_seg };

/* Vertical co-ords, and border structure. */
SHORT ltver_segment[]={ 2, 2, 0, 4, 0, 14 };
SHORT dkver_segment[]={	0, 14, 2, 16, 4, 14, 4, 4, 3, 3 };
struct Border ver_border_seg=
	{ 0, 0, 1, 0, JAM1, 5, dkver_segment, NULL };
struct Border ver_border2=
	{ 0, 0, 2, 0, JAM1, 3, ltver_segment, &ver_border_seg };

/* Deviding dots co-ords and border structure. */
SHORT ltdots[]={ 0, 4, 0, 0, 4, 0 };
SHORT dkdots[]={ 4, 0, 4, 4, 0, 4 };
struct Border dots_border=
	{ 0, 0, 2, 0, JAM1, 3, ltdots, NULL };
struct Border dots2=
	{ 0, 0, 1, 0, JAM1, 3, dkdots, &dots_border };


/* Prototype decs.. 
void number_one(int, struct Window *);
void number_two(int, struct Window *);
void number_three(int, struct Window *);
void number_four(int, struct Window *);
void number_five(int, struct Window *);
void number_six(int, struct Window *);
void number_seven(int, struct Window *);
void number_eight(int, struct Window *);
void number_nine(int, struct Window *);
void number_zero(int, struct Window *);
void dots(struct Window *);
*/

/****************************************
 *										*
 * Definitions for the different numbers*
 * made by the segments...				*
 *										*
 ****************************************/

void number_one(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
}

void number_two(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void number_three(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void number_four(int xoffset,  struct Window *win)
{
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
}

void number_five(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void number_six(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+17 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void number_seven(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
}

void number_eight(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+17 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void number_nine(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+16 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void number_zero(int xoffset, struct Window *win)
{
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+1 );
	DrawBorder( win->RPort, &ver_border2, xoffset-2, Y+17 );
	DrawBorder( win->RPort, &ver_border2, xoffset+16,Y+17 );
	DrawBorder( win->RPort, &hor_border2, xoffset,	Y+32 );
}

void dots(struct Window *win)
{
	DrawBorder( win->RPort, &dots2,	DOTX, DOTY );
	DrawBorder( win->RPort, &dots2,	DOTX, DOTY+10 );
}