add C callback