⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 esmc_error.c

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 C
字号:
/* $Id: ESMC_Error.c,v 1.1.6.1 2002/04/24 03:25:33 erik Exp $ */#include <stdarg.h>#include "ESMC_Error.h"/*============================================================================* * Global error handler structure and pointer *============================================================================*/  ESMC_ErrHandlerClass mc_errHandler;  ESMC_Bool mc_errHandlerSet = ESMC_FALSE;/*----------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_ErrHandlerSetType"void ESMC_ErrHandlerSetType(ESMC_ErrHandlerType type) {  mc_errHandlerSet = ESMC_TRUE;    switch(type){       case(ESMC_ERR_RETURN):    mc_errHandler.type=ESMC_ERR_RETURN;    mc_errHandler.p=(void(*)(void *))(&ESMC_ErrReturn);    break;  case(ESMC_ERR_EXIT):    mc_errHandler.type=ESMC_ERR_EXIT;    mc_errHandler.p=(void(*)(void *))(&ESMC_ErrExit);    break;  default:     mc_errHandler.type=ESMC_ERR_EXIT;    mc_errHandler.p=(void(*)(void *))(&ESMC_ErrExit);  }}/*----------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_Err"int ESMC_Err(int line, char *func, char *file, char *dir, int rc, int p, 	    char *msg, ...) {  va_list argp;  char buf[2048], *lbuf=ESMC_NULL;  if(*msg) {    va_start(argp, msg);    vsprintf(buf, msg, argp);    va_end(argp);    lbuf = buf;  }    /* If an error handler function has been specified, use it.       Otherwise, use exit on error as the default. */   if(mc_errHandlerSet) {    (*((void(*)(int,char *,char *,char *,int,int,char *))(mc_errHandler.p)))    (line,func,file,dir,rc,p,lbuf);  }  else{    ESMC_ErrExit(line,func,file,dir,rc,p,lbuf);  }  return(rc);}/*----------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_ErrExit"void ESMC_ErrExit(int line, char *func, char *file, char *dir, int rc, int p, 	    char *lbuf) {  char rs[256];  char *rsbuf = rs;  if(!lbuf) lbuf = " ";    printf("MF ERROR: %s() line %d in %s%s\n",func,line,dir,file);    ESMC_GetErrString(rc, &rsbuf);   printf("MF ERROR: %s, %s", rsbuf, lbuf);    exit(rc);}/*----------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_ErrReturn"void ESMC_ErrReturn(int line, char *func, char *file, char *dir, int rc, int p, 	    char *lbuf) {  return;}/*----------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_GetErrString"void ESMC_GetErrString(int rc, char **rs) {  switch(rc){  case(ESMC_ERR_DATE):    strcpy(*rs, "Invalid date generated");    break;  case(ESMC_ERR_ARG_OUTOFRANGE):    strcpy(*rs, "Argument out of range");    break;  default:    strcpy(*rs, "Does not match any known error codes");    break;  }}/*----------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_ErrPrint"void ESMC_ErrPrint(int rc) {  char rs[256];  char *rsbuf = rs;  ESMC_GetErrString(rc, &rsbuf);   printf("MF ERROR: %s\n", rsbuf);    return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -