/*
	         ShipWars Terminal Message Handling

	Functions:

	int printdw(
	        dialog_win_struct *dw,
	        char *mesg
	)
	int MesgAdd(char *new_mesg, pixel_t mesg_color)


	---
 */

#include "../include/string.h"

#include "swterm.h"



int printdw(
        dialog_win_struct *dw,
        char *mesg
)
{
	char *buf, *strptr;


	if(mesg == NULL)
	    return(-1);

	/* Copy message. */
	buf = StringCopyAlloc(mesg);
	if(buf == NULL)
	    return(-1);

	/* Remove any newline characters. */
	strptr = strchr(buf, '\n');
	if(strptr != NULL)
	    *strptr = '\0';


	MesgAdd(buf, 0);


	/* Free tempory message. */
	free(buf);

	return(0);
}


int MesgAdd(char *new_mesg, pixel_t mesg_color)
{
	int i, total_messages;
	bridge_win_mesg_struct **message;
        CDisplay *display = NULL;


        if(total_curses_displays > 0)
            display = curses_display[0];
        if(display == NULL)
            return(-1);


	message = bridge_win.message;
	total_messages = bridge_win.total_messages;


	/* Free oldest message. */
	if(total_messages > 0)
	{
	    if(message[0] != NULL)
	    {
		free(message[0]->message);
		message[0]->message = NULL;

		message[0]->color = 0;
	    }
	}

	/* Shift messages. */
	for(i = 0; i < (total_messages - 1); i++)
	{
	    if((message[i] == NULL) ||
               (message[i + 1] == NULL)
	    )
		continue;

	    message[i]->message = message[i + 1]->message;
	    message[i]->color = message[i + 1]->color;
	}

	/* Set last message. */
	if(total_messages > 0)
        {
	    i = total_messages - 1;
	    if(message[i] != NULL)
	    {
		message[i]->message = StringCopyAlloc(new_mesg);
		message[i]->color = mesg_color;		
	    }
	}


	/* Redraw messages. */
	if(bridge_win.map_state)
	    BridgeDrawMessages(display);


	return(0);
}