// chapitre 2 callback.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"

// partie système
#include <conio.h>

typedef void (*pf_key_press)(int key);

pf_key_press*gestionnaires;
int nb_gestionnaires;

void init()
{
	gestionnaires=new pf_key_press[10];	// 10 gestionnaires max
	nb_gestionnaires=0;
}

void enregistrer(pf_key_press gestionnaire)
{
	gestionnaires[nb_gestionnaires++]=gestionnaire;
}

void propager_evenement(int touche)
{
	for(int i=0;i<nb_gestionnaires; i++)
		(*gestionnaires[i])(touche);	// appelle le gestionnaire
}

void surveiller_clavier()
{
	int touche;
	do
	{ 
		while(!_kbhit()); // attend la frappe d'une touche
		touche=_getch();  // récupère la touche

		propager_evenement(touche);
	} while(touche!='q');
}

// partie application
void touche_pressee1(int key)
{
	printf("1. Vous avez pressé la touche %c\n",key);
}

void touche_pressee2(int key)
{
	printf("2. Vous avez pressé la touche %c\n",key);	
}

// main()
int _tmain(int argc, _TCHAR* argv[])
{
	// initialisation du système
	init();

	// ces deux fonctions seront appelées lorsque le clavier
	// sera sollicité
	enregistrer(&touche_pressee1);
	enregistrer(&touche_pressee2);
	
	// démarrage
	surveiller_clavier();
	return 0;
}

