
#include <hc11.h>
#define EOF 00


/************************************************************/

int scanf(char *buff)
	{
	int i=0;
	char c;
	curs_on();
	while ((c=getkey())!=EOF)
	{
	buff[i]=c;i++;
	putchar(c);
	}
	curs_off();
	return(c);
	}
	
/************************************************************/

char getkey(void)
	{
	  char c;
	  char n;
	  int cnt;

//	asm("sei");
	for(cnt=0;cnt<=5;cnt++)
	while((PORTE != 0xFF)||(PORTA & 0x0F) != 0x0F); /* attente de relachement */

	for(cnt=0;cnt<=5;cnt++)
	while((PORTE == 0xFF)&&(PORTA & 0x0F) == 0x0F); /* attente d'une touche
							  pressée */


	if (PORTE != 0xFF )	/* touche 1 à 8 */

		{
		for(cnt=0;cnt<=5;cnt++)
		while((c=PORTE) != (n=PORTE)); /* anti rebond */

		switch (c){
			case 0xFE: c='1';break;
			case 0xFD: c='2';break;
			case 0xFB: c='3';break;
			case 0xF7: c='4';break;
			case 0xEF: c='5';break;
			case 0xDF: c='6';break;
			case 0xBF: c='7';break;
			case 0x7F: c='8';break;
			default: c=0xFF;break; /* erreur */
			  }
		}


	else	/* touches 0, 9, #, * */
		{

		for(cnt=0;cnt<=5;cnt++)
		while((c=(PORTA & 0x0F)) != (n=(PORTA & 0x0F))); /* anti rebond */

		switch(c){
			case 0x0E: c='9';break;
			case 0x0D: c='0';break;
			case 0x0B: c=EOF;break;	/* touche entrée */
			case 0x07: c='*';break;	
			default: c=0xFF;break; /* erreur */
			}
		}
//	asm("cli");
	return(c);
	}

/************************************************************/	























