[comp.lang.c++] Event Driver

lapique@siisg1.epfl.ch (Lapique Francis) (03/28/91)

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
class event {
public:
   virtual void activate(void) { printf("No operation\n"); }
};
class menu : public event {
    event **entries;
    int num_items;
public:
    int cur_item;
    menu(int nitems,...);
    void activate(void);
};
menu::menu(int nitems,...)
{
    va_list arg_ptr;
    int i;
    entries = new event *[ num_items = nitems];
    va_start(arg_ptr,nitems);
    for ( i=0; i <num_items;i++) {
       entries[i] = va_arg(arg_ptr,event *);
    }
    va_end(arg_ptr);
    cur_item = 0;
}
void menu::activate(void)
{
   printf("Enter a value item: ");
   scanf("%d",&cur_item);
   printf("\n");
   if ( cur_item > 0 && cur_item <= num_items ) {
      entries[cur_item-1]->activate();
   }
    else {
    printf ("Invalid selection\n");
    activate();
   }
}
class sample_event : public event {
    char report [80];
public:
  sample_event (char *rep) { strcpy(report,rep); }
  void activate(void) { printf("%s\n",report); }
};
void main()
{
sample_event esckey ( "ESC OK" );
sample_event leftmouse ("leftmouse OK");
menu queue(2,&esckey,&leftmouse);
queue.activate();
}

Now I would like to execute a function "f1" when the item 1
is enter, and do something like "value = 1" when the item 2
is enter.
What is the  best way to do that ?
F.Lapique
------------------------------------------------------------
F.Lapique lapique@sic.epfl.ch/lapique@siisg1.epfl.ch
Swiss Federal Institute of Technology- Lausanne
tel  (+41-21) 693.45.96
------------------------------------------------------------