/*
 * MSGBOX.C - msgbox internal command.
 *
 * clone from 4nt msgbox command
 *
 * 25 Aug 1999
 *     started - Paolo Pantaleo <paolopan@freemail.it>
 *
 *    30-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
 *        Remove all hardcode string to En.rc
 */

#include <precomp.h>
#include "resource.h"

#ifdef INCLUDE_CMD_MSGBOX


#define U_TYPE_INIT 0

//undefine it to allow to omit arguments
//that will be replaced by default ones
#define _SYNTAX_CHECK


INT CommandMsgbox (LPTSTR cmd, LPTSTR param)
{

	//used to parse command line
	LPTSTR tmp;

	//used to find window title (used as messagebox title)
	//and to find window handle to pass to MessageBox
	HWND hWnd;
	TCHAR buff[128];

	//these are MessabeBox() parameters
	LPTSTR title, prompt = "";
	UINT uType = U_TYPE_INIT;

	/* set default title to window title */
	GetConsoleTitle(buff, 128);
	title = buff;

	if (_tcsncmp (param, _T("/?"), 2) == 0)
	{
		ConOutResPaging(TRUE,STRING_MSGBOX_HELP);
		return 0;
	}

	//yes here things are quite massed up :)

	//skip spaces
	while(_istspace(*param))
		param++;

	//search for type of messagebox (ok, okcancel, ...)
	if (_tcsnicmp(param, _T("ok "), 3) == 0)
	{
		uType |= MB_ICONEXCLAMATION | MB_OK;
		param += 3;
	}
	else if (_tcsnicmp(param, _T("okcancel "), 9) == 0)
	{
		uType |= MB_ICONQUESTION | MB_OKCANCEL;
		param += 9;
	}
	else if (_tcsnicmp(param, _T("yesno "), 6) == 0)
	{
		uType |= MB_ICONQUESTION | MB_YESNO;
		param += 6;
	}
	else if (_tcsnicmp(param, _T("yesnocancel "), 12) == 0)
	{
		uType |= MB_ICONQUESTION | MB_YESNOCANCEL;
		param += 12;
	}
	else
	{
#ifdef _SYNTAX_CHECK
		error_req_param_missing ();
		return 1;
#else
		uType |= MB_ICONEXCLAMATION | MB_OK;
#endif
	}


	//skip spaces
	while(_istspace(*param))
		param++;

#ifdef _SYNTAX_CHECK
	//if reached end of string
	//it is an error becuase we do not yet have prompt
	if (*param == 0)
	{
		error_req_param_missing ();
		return 1;
	}
#endif

	//search for "title"
	tmp = param;

	if (*param == '"')
	{
		tmp = _tcschr(param + 1, '"');
		if (tmp)
		{
			*tmp = 0;
			title = param + 1;
			tmp++;
			param = tmp;
		}
	}

	//skip spaces
	while(_istspace(*param))
		param++;

#ifdef _SYNTAX_CHECK
	//get prompt
	if (*param == 0)
	{
		error_req_param_missing ();
		return 1;
	}
#endif

	prompt = param;

	hWnd=GetConsoleWindow ();
//	DebugPrintf("FindWindow hWnd = %d\n",hWnd);
//	ConErrPrintf("FindWindow hWnd = %d\n",hWnd);

	switch (MessageBox(hWnd, prompt, title, uType))
	{
		case IDYES:
		case IDOK:
			nErrorLevel = 10;
			break;

		case IDNO:
			nErrorLevel = 11;
			break;

		case IDCANCEL:
			nErrorLevel = 12;
			break;
	}

	return 0;
}

#endif /* INCLUDE_CMD_MSGBOX */

/* EOF */
