/******************************************************************************
 * Copyright (c) 2004, 2008 IBM Corporation
 * All rights reserved.
 * This program and the accompanying materials
 * are made available under the terms of the BSD License
 * which accompanies this distribution, and is available at
 * http://www.opensource.org/licenses/bsd-license.php
 *
 * Contributors:
 *     IBM Corporation - initial implementation
 *****************************************************************************/
#include <libbootmsg.h>

// : cp ( cp-id -- )
PRIM(bootmsg_X2d_cp)
	int cpid = TOS.n; POP;
	bootmsg_cp(cpid);
MIRP

// : bootmsg-warning ( cp-id lvl pstr -- )
PRIM(bootmsg_X2d_warning)
	char* str = TOS.a; POP;
	short lvl = TOS.n; POP;
	short cpid = TOS.n; POP;
	bootmsg_warning(cpid, (const char*)str, lvl);
MIRP

// : bootmsg-error ( cp-id pstr -- )
PRIM(bootmsg_X2d_error)
	char* str = TOS.a; POP;
	short cpid = TOS.n; POP;
	bootmsg_error(cpid, (const char*)str);
MIRP

// : bootmsg-debugcp ( cp-id lvl pstr -- )
PRIM(bootmsg_X2d_debugcp)
	char* str = TOS.a; POP;
	short lvl = TOS.n; POP;
	short cpid = TOS.n; POP;
	bootmsg_debugcp(cpid, (const char*)str, lvl);
MIRP

// : bootmsg-setlevel ( area lvl -- )
PRIM(bootmsg_X2d_setlevel)
	char lvl = TOS.n; POP;
	short area = TOS.n; POP;
	bootmsg_setlevel(area, lvl);
MIRP

// : bootmsg-checklevel ( area lvl -- [true|false] )
PRIM(bootmsg_X2d_checklevel)
	char lvl = TOS.n; POP;
	short area = TOS.n; POP;
	PUSH;
	TOS.n = (bootmsg_checklevel(area, lvl)) ? -1 : 0;
MIRP

// : bootmsg-nvupdate ( -- )
PRIM(bootmsg_X2d_nvupdate)
	bootmsg_nvupdate();
MIRP
