📄 os.c
字号:
/* PSPH - Parallel SPH program
* Bradley Smith and Lou Baker, Dagonet Software
*/
static char sccs_id[] = "@(#) /home2/bsmith/src/psph/SCCS/s.os.c 1.9 94/03/14";
/*
* Potentially Operating System Specific Stuff
*/
#include "all.h"
#ifdef DEBUG
int DebugFlag = FALSE;
#endif
void
PPrintString(char *s)
{
#ifdef PRINTROOT
OnePrintString(s);
#else
printf("%s",s);
#endif
}
static char out_str[1024];
void
Debug(char *fmt, ...)
{
#ifdef DEBUG
va_list args;
va_start(args,fmt);
vsprintf(out_str,fmt,args);
PPrintString(out_str);
va_end(args);
#else
#endif
}
void
UserMessage(char * fmt,...)
{
va_list args;
va_start(args,fmt);
vsprintf(out_str,fmt,args);
PPrintString(out_str);
va_end(args);
}
void
ReportError(char * s, int status_fatal)
{
PPrintString(s);
if(status_fatal)
{
LogFatalError(s);
Exit(status_fatal);
}
}
void
LogFatalError(char *s)
{
/* Attempt to open a fatal error log */
FILE *f;
char fatal_log[120];
char *home;
if((home = getenv("HOME")) == NULL)
#ifdef WINDOWS
home = "\\";
#else
home = "/tmp";
#endif
sprintf(fatal_log, "%s/psph.log", home);
if((f=fopen(fatal_log,"a")) != NULL)
{
#ifdef PVM
fprintf(f,"[%d] [%x] %s", Rank, pvm_mytid(), s);
#else
fprintf(f,"[%d] %s", Rank, s);
#endif
fclose(f);
}
}
void
Exit(int status)
{
char msg[80];
if(status == 0)
ExitMPISystem();
else
{
sprintf(msg, "Proc %d is abnormally exiting psph (status=%d)\n", Rank, status);
PPrintString(msg);
LogFatalError(msg);
#ifdef PVM
pvm_perror("PVM Error ");
#endif
MPI_Abort(MPI_COMM_WORLD, status);
}
exit(status);
}
void
Report(char * s)
{
PPrintString(s);
}
void *
New(SIZETYPE size)
{
void *p;
#ifdef DEBUG
if(size == 0)
Debug("New() called with size == 0!\n");
#endif
if((p=malloc(size)) == NULL)
ReportError("Out of memory\n",TRUE);
return p;
}
void *
ReAlloc(void *old, SIZETYPE size)
{
void *p;
char str[256];
#ifdef DEBUG
if(size == 0 || old == NULL)
Debug("ReAlloc called with size == 0 or old ptr==NULL\n");
#endif
if((p=realloc(old, size)) == NULL)
ReportError("Out of memory in ReAlloc\n", TRUE);
return(p);
}
void
Delete(void *p)
{
#ifdef DEBUG
if(p== NULL)
Debug("WARNING - Delete(NULL) called in os.c\n");
#endif
free(p);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -