Hi Ash, > > The big question is does your PIC compiler actually support function > pointers :) At least by manual :). It seems to be, if I define the pointed function before the struct the compiler will work. But if I make a declaration before and define after the struct, this gives me a linker error. I dont know, its error or feature :). The resolution is next: //menu definitions #define fomenu "temperature" typedef void voidfunc(char); typedef voidfunc * fad; static bank1 char current_menu; //pre definitions of functions voidfunc menu_draw; voidfunc menu_handler; voidfunc menu_real; void menu(char index) { menu_real(index); }; typedef struct { const char line[20] ; const char key ; fad function ; const char param ; }menuitem; typedef struct { const char itemno ; const menuitem * item ; }menutype; const menuitem main_menu[] = {//name key function param "temperature" ,'1' ,menu, 1, "relative humidity" ,'2' ,menu, 2, "light strength" ,'3' ,menu, 3, "device setting" ,'4' ,menu, 4 }; #define N0 sizeof(main_menu)/sizeof(menuitem) const menuitem menu1[] = { "calibration " ,'1',menu,10, "alarm max " ,'2',menu,11, "alarm min " ,'3',menu,12, "pwm adjust " ,'4',menu,13 }; #define N1 sizeof(menu1)/sizeof(menuitem) const menuitem menu2[] = { "calibration " ,'1',menu,21, "alarm max " ,'2',menu,22, "alarm min " ,'3',menu,23, "spray control " ,'4',menu,24, "pwm adjust " ,'5',menu,25 }; #define N2 sizeof(menu2)/sizeof(menuitem) const menuitem menu3[] = { "calibration " ,'1',menu,31, "alarm max " ,'2',menu,32, "alarm min " ,'3',menu,33, "open/close pulse" ,'4',menu,34, "close time " ,'5',menu,35, "optimum light level" ,'6',menu,36, "time definitions" ,'7',menu,37 }; #define N3 sizeof(menu3)/sizeof(menuitem) const menuitem menu4[] = { "operation mode " ,'1',menu,41, "network setup " ,'2',menu,42, "date " ,'3',menu,43, "connetcted devices" ,'3',menu,44, "i/o definitions" ,'4',menu,45 }; #define N4 sizeof(menu4)/sizeof(menuitem) const menutype menus[]= { N0,main_menu, N1,menu1, N2,menu2, N3,menu3, N4,menu4 }; void menu_real(char index) { menu_draw(index); }; void menu_draw(char index) { lcd_clear(); lcd_write(main_menu[index].line); } void menu_handler(char index) { } udv Csaba -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu