#include "graphics.h"
#include "globals.h"

#define CMDHELP 1
#define KEYHELP 2
#define TILEHELP 3
 
void position (int y, int x)
{
/*    move (Ypos (y), Xpos (x));*/
}

void mark (int y, int x, char *s)
{
/*
    position (y, x);
    addstr (s);
*/
}

void removeletter(void)
{
    int     y,
            x;
/*
    getyx (stdscr, y, x);
    y = y - BOARDLINE;
    x = (x - BOARDCOL) >> 1;
    addch (BOARDCHAR (y, x));
*/
}

void placeletter (char c)
{
/*
    addch ((c & 077) + '@');
*/
}

/* Clear line l of the screen */
void clearline (int l)
{
/*
    move (l, 0);
    clrtoeol ();
*/
}

/* Print string s centered on line l */
void centerprint (int  l, char *s)
{
/*
    clearline (l);
    mvaddstr (l, (COLS - strlen (s)) / 2, s);
*/
}

/* Draw a horizontal line on screen row y from xmin to xmax.
   Use '-' in the middle of the line and '+' at the ends. */

void horiz (int y, int xmin, int xmax)
{
/*
    int     x;
    standout ();
    for (x = xmin; x <= xmax; x++)
	mvaddch (y, x, (x == xmin || x == xmax) ? '+' : '-');
    standend ();
*/
}

/* Draw a vertical line on screen column x from ymin to ymax.
   Use '|' in the middle of the lines and '+' at the ends. */
void vert (int x, int ymin, int ymax)
{
/*
    int     y;
    standout ();
    for (y = ymin; y <= ymax; y++)
	mvaddch (y, x, (y == ymin || y == ymax) ? '+' : '|');
    standend ();
*/
}

void showset (unsigned int line, unsigned long set)
{
/*
    char    c = 'a' - 1;
    clearline (line);
    move (line, 10);
    while (set) {
	if (set & 1)
	    addch (c);
	set >>= 1;
	c++;
    }
*/
}

void posit (char fill[17][17], unsigned int r, unsigned int c)
{
/*
    if (fill == afill)
	position (r, c);
    else
	position (c, r);
*/
}

void beep(void)
{
/*
    putchar ('\007');
*/
}

void errortell(char *s)
{
/*
    centerprint (ERRORLINE, s);
*/
}

void tell(char *s)
{
/*
    centerprint (MSGLINE, s);
*/
}

static int helpline;
static int whichhelp = 0;

void picture(void)
{
/*
    centerprint (BOARDLINE - 1, "CRAB 1.3 - Jacoppel Enterprises");
*/
 /* Draw a box around the board */
/*
    horiz (Ypos (0), Xpos (0), Xpos (LEN + 1));
    horiz (Ypos (LEN + 1), Xpos (0), Xpos (LEN + 1));
    vert (Xpos (0), Ypos (0), Ypos (LEN + 1));
    vert (Xpos (LEN + 1), Ypos (0), Ypos (LEN + 1));
    whichhelp = 0;
    givehelp ();
*/
}


void starthelp(void)
{
    helpline = HELPWLINE;
}

void helps(char *r, char *s)
{
/*
    move (helpline, HELPWCOL);
    clrtoeol ();
    addstr (r);
    mvaddstr (helpline++, HELPWCOL2, s);
*/
}

void helpc(char c, char *s)
{
/*
    move (helpline, HELPWCOL);
    clrtoeol ();
    addch (c);
    mvaddstr (helpline++, HELPWCOL2, s);
*/
}

void helpt(char *s)
{
/*
    move (helpline++, HELPWCOL2 - 3);
    clrtoeol ();
    standout ();
    addstr (s);
    standend ();
    addch (' ');
    clrtoeol ();
*/
}

void helpx(void)
{
/*
    move (helpline++, HELPWCOL);
    clrtoeol ();
*/
}

void endhelp(void)
{
/*
    int     dummy;
    getyx (stdscr, helpline, dummy);
    helpline++;
    while (helpline < LINES)
	helpx ();
*/
}

void givehelp(void)
{
    int     i;
/*
    starthelp ();
    switch (++whichhelp) {
	default: 
	    whichhelp = CMDHELP;
	case CMDHELP: 
	    helpt (" Commands ");
	    helpx ();
	    helps ("0-9", "Move Cursor");
	    helps ("a-z", "Place Letter");
	    helpc ('#', "Place Blank");
	    helps ("space", "Remove Tile");
	    helpx ();
	    helpc ('.', "Make Move");
	    helpc (':', "Make Bogus Move");
	    helpc ('-', "Exchange Tiles");
	    helpc ('=', "Pass");
	    helpc ('+', "Quit Game");
	    helpc ('~', "Suggest Move");
	    helpx ();
	    helpc ('?', "Get More Help");
	    break;
	case KEYHELP: 
	    helpt ("    Key   ");
	    helpx ();
	    helps ("A-Z", "Normal Tile");
	    helps ("a-z", "Blank on Board");
	    helpc ('#', "Blank in Rack");
	    helpc (TILEBACK, "Back of Tile");
	    helpx ();
	    helpc (LETx2, "Double Letter");
	    helpc (LETx3, "Triple Letter");
	    helpc (WORDx2, "Double Word");
	    helpc (WORDx3, "Triple Word");
	    break;
	case TILEHELP: 
	    helpt ("   Tiles  ");
	    helpx ();
	    helps ("Value", " #Unaccounted");
	    helpx ();
	    for (i = 1; i < 28; ++i)
		showtilecount (i);
	    break;
    }
    endhelp ();
*/
}

#define HELPMID		((HELPWCOL + COLS) / 2)

void showtilecount(int k)
{
/*
    int     x,
            y;
    if (whichhelp != TILEHELP)
	return;
    if (k < 14) {
	move (HELPWLINE + 3 + k, HELPWCOL);
	prtile (k);
	getyx (stdscr, y, x);
	while (x++ < HELPMID)
	    addch (' ');
    }
    else
	if (k < 27) {
	    move (HELPWLINE - 10 + k, HELPMID);
	    clrtoeol ();
	    prtile (k);
	}
	else {
	    move (HELPWLINE + 17, HELPWCOL);
	    clrtoeol ();
	    printw ("    Blank[0] %d", rack[k] + sock[k]);
	}
*/
}

void prtile(int k)
{
/*
    register    value = lettervalue[k];
    register    unaccounted = rack[k] + sock[k];
    if (unaccounted > 9 || value > 9)
	printw ("%c[%d] %d", '@' + k, value, unaccounted);
    else
	printw ("%c[%d]  %d", '@' + k, value, unaccounted);
*/
}

void thinking(int amI)
{
/*
    mvprintw (MYLINE - 1, RACKCOL, amI ? "THINKING" : "        ");
*/
}

void showsock(void)
{
    int     i;
/*
    mvprintw (SOCKLINE - 1, SOCKCOL, " Tiles Remaining: %2d", socksize);
    for (i = socksize; i >= 0; i--) {
	sockposition (i);
	if (inch () == TILEBACK)
	    break;
	addch (TILEBACK);
    }

    for (i = socksize; i < 100; i++) {
	sockposition (i);
	if (inch () == ' ')
	    break;
	addch (' ');
    }
*/
}

void sockposition(int i)
{
/*
    move (SOCKLINE + i % 5, SOCKCOL + i / 5 + (i / 5 > 9));
*/
}

void showrack (int y, char *rak, int visible);

void showstuff(void)
{
    int     i,
            j;

/*
    showsock ();

    mvprintw (MYLINE, RACKCOL, "CRAB's score: %3d", myscore);
    showrack (MYLINE + 1, rack, FALSE);

    mvprintw (YOURLINE, RACKCOL, "Your score: %3d", yourscore);
    showrack (YOURLINE + 1, yourrack, TRUE);
*/
}

void showrack (int y, char *rak, int visible)
{
#define V(x) (visible ? (x) : TILEBACK)
    int     i,
            j;
/*
    move (y, RACKCOL);
    for (i = 1; i < 27; i++)
	for (j = 0; j < rak[i]; j++) {
	    addch (V (i | '@'));
	    addch (' ');
	}
    for (j = 0; j < rak[27]; j++) {
	addch (V ('#'));
	addch (' ');
    }
    getyx (stdscr, i, j);
    while (j++ < RACKCOL + 15)
	addch (' ');
*/
}
	
int showpoints(int y, char *rak)
{
    int     i,
            j;
/*
    move (y, RACKCOL);
    for (i = 1; i < 28; i++)
	for (j = 0; j < rak[i]; j++)
	    printw ("%d ", lettervalue[i]);
    getyx (stdscr, i, j);
    while (j < RACKCOL + 15) {
	addch (' ');
	j++;
    }
    printw ("= %2d", pointrack (rak));
*/
}

int pointrack(char *rak)
{
    int     i,
            tot = 0;
    for (i = 1; i < 28; i++)
	tot += rak[i] * lettervalue[i];
    return (tot);
}

void endgame(void)
{
    int     mytot,
            yourtot;
    thinking (0);
    yourtot = pointrack (yourrack);
    mytot = pointrack (rack);
    myscore -= mytot;
    yourscore -= yourtot;
    if (anyrackempty) {
	myscore += yourtot;
	yourscore += mytot;
    }
    showstuff ();
    showrack (MYLINE + 1, rack, TRUE);
    showpoints (MYLINE + 2, rack);
    showpoints (YOURLINE + 2, yourrack);
    if (myscore > yourscore)
	tell ("The game is over.  CRAB wins.");
    else
	if (yourscore > myscore)
	    tell ("The game is over.  You win.");
	else
	    tell ("The game is a draw.");
}

void quit(void)
{
    char    c;
    beep ();
    errortell ("Play again?");
/*
    refresh ();
    while ((c = getch ()) != 'n' && c != 'y')
	beep ();
 */ c = 'n';    if (c == 'y') restart ();
 /* Quit - Move cursor to bottom of screen and fix up funny terminal modes
    we set */
  cgi_bin();
/*
    move (LINES - 1, 0);
    refresh ();
    noraw ();
    echo ();

    endwin ();
*/
    exit ();
}