added function pointer typedef