for(;;)	/* boucle infinie*/
	{
			printf("\x04");
			printf("APPEL:");
			scanf(&buff[0]);
					
			c=buff[0];
			
			switch (c)
			       { case '0':heure();
			       	 break;
							 case '1':version();
							 break;
							 default : break;
				     }
			printf("\x04");
			 
	}
	
} // fin du main	
/*****************************************************************************/
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);
	}


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




int putchar(char c)	
	{
	status();
	if (((IRWRIN & 0x7F)==16) || (c=='\n'))	/* fin de ligne ? */
	{
	IRWRIN=(0x80|0x40); 	/* positionnement ligne inférieure */
	lcdwait(0);
	if (c=='\n')
	return(c);
	}
	if ((IRWRIN & 0x7F)>= 0x4F)
	lcd_shift(right);

	/* reconnaissance des caracteres de controle */
	switch(c){
		case '\b': {status();
				if ((IRWRIN & 0x7F)==0x40) IRWRIN=(16|0x80); /* on fait un back
									       * space on se 
									       * repositionne
									       * en début de ligne */
				IRWRIN=0x10; /* back_space sur l'afficheur */
				return(c);
				}
		case 0x04: {
				lcd_cls(); 	/* effacement de l'afficheur */
				rtn_home();
				return(c);
				}

		default: {	/* rien de tout ça donc c'est un caractere imprimable ! */	
	status();
	DR_WRITIN=c;  /* écriture du charactère */
	lcdwait(0);
	return(c);
	}
	}
	}
	
	