/*
 * Z80SIM  -  a	Z80-CPU	simulator
 *
 * Copyright (C) 1987-92 by Udo Munk
 *
 * This module of the Z80-CPU simulator must not be modified by a user,
 * see license agreement!
 *
 * History:
 * 28-SEP-87 Development on TARGON/35 with AT&T Unix System V.3
 * 11-JAN-89 Release 1.1
 * 08-FEB-89 Release 1.2
 * 13-MAR-89 Release 1.3
 * 09-FEB-90 Release 1.4 Ported to TARGON/31 M10/30
 * 20-DEC-90 Release 1.5 Ported to COHERENT 3.0
 * 10-JUN-92 Release 1.6 long casting problem solved with COHERENT 3.2
 *			 and some optimization
 * 25-JUN-92 Release 1.7 comments in english and ported to COHERENT 4.0
 */

/*
 *	This modul contains some commonly used functions
 */

#include <ctype.h>
#if defined(COHERENT) && !defined(_I386)
#include <sgtty.h>
#else
#include <termio.h>
#endif
#include "sim.h"

/*
 *	atoi for hexadecimal numbers
 */
exatoi(str)
register char *str;
{
	register int num = 0;

	while (isxdigit(*str)) {
		num *= 16;
		if (*str <= '9')
			num += *str - '0';
		else
			num += toupper(*str) - '7';
		str++;
	}
	return(num);
}

/*
 *	Wait for a single keystroke without echo
 */
getkey()
{
	register int c;
#if defined(COHERENT) && !defined(_I386)
	struct sgttyb old_term,	new_term;
#else
	struct termio old_term, new_term;
#endif

#if defined(COHERENT) && !defined(_I386)
	gtty(0, &old_term);
	new_term = old_term;
	new_term.sg_flags |= CBREAK;
	new_term.sg_flags &= ~ECHO;
	stty(0, &new_term);
#else
	ioctl(0, TCGETA, &old_term);
	new_term = old_term;
	new_term.c_lflag &= ~(ICANON | ECHO);
	new_term.c_cc[4] = 1;
#endif
	c = getchar();
#if defined(COHERENT) && !defined(_I386)
	stty(0, &old_term);
#else
	ioctl(0, TCSETAW, &old_term);
#endif
	return(c);
}
