#pragma implementation #include #include #include #include #include "tlmplib.h" static void (*errfct)(const char *)=NULL; void tlmp_seterrorfct (void (*fct)(const char *errmsg)) { errfct = fct; } static const char *prefix = NULL; class ERROR_PREFIX_PRIVATE{ public: char buf[1000]; const char *last_prefix; }; PUBLIC ERROR_PREFIX::ERROR_PREFIX(const char *ctl, ...) { priv = new ERROR_PREFIX_PRIVATE; va_list list; va_start (list,ctl); vsnprintf (priv->buf,sizeof(priv->buf)-1,ctl,list); priv->last_prefix = prefix; prefix = priv->buf; } PUBLIC ERROR_PREFIX::~ERROR_PREFIX() { prefix = priv->last_prefix; delete priv; } void tlmp_error (const char *msg, ...) { va_list list; va_start (list,msg); if (errfct != NULL){ char tmp[2000]; tmp[0] = '\0'; if (prefix != NULL){ strcpy (tmp,prefix); } int len = strlen(tmp); vsnprintf (tmp+len,sizeof(tmp)-1-len,msg,list); (*errfct)(tmp); }else{ vfprintf (stderr,msg,list); } va_end (list); }