11 #if !defined(WIN32) || defined(__CYGWIN__) 29 #define access(PATH,MODE) _access(PATH,00) 38 int write(
int fd,
const void* buf,
int count)
40 return write(fd,(
void*)buf,(
size_t)count);
43 int stat(
const char* fn,
struct stat* buf)
45 return stat((
char*)fn, buf);
56 void NAMD_version(
int *major,
int *minor,
int *patchLevel,
int *releaseType)
60 int NAMD_patchLevel = 0;
69 int n = sscanf(vstr,
"%d%3[^0-9]%d%7[^0-9]%d%c",
70 &NAMD_major, dot, &NAMD_minor, release, &NAMD_patchLevel, extra);
72 NAMD_bug(
"Unable to parse NAMD_VERSION from Makefile");
75 if (strcmp(release,
"a") == 0 || strcmp(release,
"alpha") == 0) {
78 else if (strcmp(release,
"b") == 0 || strcmp(release,
"beta") == 0) {
81 else if (strcmp(release,
".") == 0 ||
82 strcmp(release,
"final") == 0 ||
83 strcmp(release,
"release") == 0 ||
84 strcmp(release,
"patch") == 0) {
88 NAMD_bug(
"Unable to parse NAMD_VERSION from Makefile");
95 if (major != NULL) *major = NAMD_major;
96 if (minor != NULL) *minor = NAMD_minor;
97 if (patchLevel != NULL) *patchLevel = NAMD_patchLevel;
98 if (releaseType != NULL) *releaseType = NAMD_releaseType;
104 if(a == 0 || b == 0)
return 0;
105 else if(a == b)
return a;
106 else if(a > b)
return NAMD_gcd(a-b,b);
117 rs =
new char[strlen(s) + 1];
127 if ( ! err_msg ) err_msg =
"(unknown error)";
128 CkPrintf(
"EXITING: %s\n", err_msg);
130 char repstr[24] =
"";
131 if (CmiNumPartitions() > 1
132 ||
Node::Object()->simParameters->CUDASOAintegrateMode) {
133 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
135 CkAbort(
"%sEXITING: %s\n", repstr, err_msg);
137 CkError(
"%sEXITING: %s\n", repstr, err_msg);
138 #if CHARM_VERSION < 61000 149 if ( ! err_msg ) err_msg =
"(unknown error)";
150 CkPrintf(
"FATAL ERROR: %s\n", err_msg);
152 char repstr[24] =
"";
153 if (CmiNumPartitions() > 1 ||
156 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
158 CkAbort(
"%sFATAL ERROR: %s\n", repstr, err_msg);
160 CkError(
"%sFATAL ERROR: %s\n", repstr, err_msg);
161 #if CHARM_VERSION < 61000 172 if ( ! err_msg ) err_msg =
"(unknown error)";
173 const char *sys_err_msg = strerror(errno);
174 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
175 CkPrintf(
"FATAL ERROR: %s: %s\n", err_msg, sys_err_msg);
177 char repstr[24] =
"";
178 if (CmiNumPartitions() > 1 ||
181 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
183 CkAbort(
"%sFATAL ERROR: %s: %s\n", repstr, err_msg, sys_err_msg);
185 CkError(
"%sFATAL ERROR: %s: %s\n", repstr, err_msg, sys_err_msg);
186 #if CHARM_VERSION < 61000 197 if ( ! err_msg ) err_msg =
"(unknown error)";
198 const char *bug_msg =
199 "FATAL ERROR: See http://www.ks.uiuc.edu/Research/namd/bugreport.html";
200 CkPrintf(
"FATAL ERROR: %s\n%s\n",err_msg, bug_msg);
202 char repstr[24] =
"";
203 if (CmiNumPartitions() > 1 ||
206 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
208 CkAbort(
"%sFATAL ERROR: %s\n%s\n", repstr, err_msg, bug_msg);
210 CkError(
"%sFATAL ERROR: %s\n%s\n", repstr, err_msg, bug_msg);
211 #if CHARM_VERSION < 61000 222 rval = access(filename, F_OK);
223 }
while ( rval != 0 && errno == EINTR );
224 if ( rval != 0 && errno != ENOENT ) {
225 const char *sys_err_msg = strerror(errno);
226 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
228 << filename <<
": " << sys_err_msg <<
"\n" <<
endi;
238 if ( ! extension ) extension =
".BAK";
239 char *backup =
new char[strlen(filename)+strlen(extension)+1];
240 strcpy(backup, filename);
241 strcat(backup, extension);
242 #if defined(WIN32) && !defined(__CYGWIN__) 243 if (
remove(backup) )
if ( errno != ENOENT ) {
244 char *sys_err_msg = strerror(errno);
245 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
247 << backup <<
": " << sys_err_msg <<
"\n" <<
endi;
251 while ( rename(filename,backup) )
253 if ( errno == EINTR )
continue;
254 const char *sys_err_msg = strerror(errno);
255 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
256 iout <<
iERROR <<
"Error on renaming file " << filename
257 <<
" to " << backup <<
": " << sys_err_msg <<
"\n" <<
endi;
259 if ( errno == EXDEV )
continue;
275 while ( (fd = _open(fname, O_WRONLY|(append?O_APPEND:O_EXCL)|O_CREAT|O_TEXT,_S_IREAD|_S_IWRITE)) < 0) {
277 #ifdef NAMD_NO_O_EXCL 278 while ( (fd = open(fname, O_WRONLY|(append?O_APPEND:O_TRUNC)|O_CREAT,
280 while ( (fd = open(fname, O_WRONLY|(append?O_APPEND:O_EXCL)|O_CREAT,
282 S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0) {
284 if ( errno != EINTR ) {
286 sprintf(errmsg,
"Unable to open text file %s", fname);
295 void NAMD_write(
int fd,
const char *buf,
size_t count,
const char *fname) {
297 #if defined(WIN32) && !defined(__CYGWIN__) 298 long retval = _write(fd,buf,count);
300 ssize_t retval = write(fd,buf,count);
302 if ( retval < 0 && errno == EINTR ) retval = 0;
305 sprintf(errmsg,
"Error on writing to file %s", fname);
308 if ( retval > count )
NAMD_bug(
"extra bytes written in NAMD_write()");
317 while ( _close(fd) ) {
319 while ( close(fd) ) {
321 if ( errno != EINTR ) {
323 sprintf(errmsg,
"Error on closing file %s", fname);
341 FILE *
Fopen (
const char *filename,
const char *mode)
346 #if defined(NOCOMPRESSED) 347 if (!stat(filename,&buf))
350 while ( ! (rval = fopen(filename,mode)) ) {
351 if ( errno != EINTR )
break;
356 if (!stat(filename,&buf))
358 if (!S_ISDIR(buf.st_mode)) {
360 while ( ! (rval = fopen(filename,mode)) ) {
361 if ( errno != EINTR )
break;
370 command = (
char *)malloc(strlen(filename)+25);
372 sprintf(command,
"zcat %s.Z",filename);
373 realfilename = command+5;
374 iout <<
"Command = " << command <<
"\n" <<
endi;
375 iout <<
"Filename.Z = " << realfilename <<
"\n" <<
endi;
376 if (!stat(realfilename,&buf))
378 if (!S_ISDIR(buf.st_mode))
380 fout = popen(command,mode);
388 if (isalnum(C) || isspace(C))
399 sprintf(command,
"gzip -d -c %s.gz",filename);
400 realfilename = command+11;
401 iout <<
"Command = " << command <<
"\n" <<
endi;
402 iout <<
"Filename.gz = " << realfilename <<
"\n" <<
endi;
403 if (!stat(realfilename,&buf))
405 if (!S_ISDIR(buf.st_mode))
407 fout = popen(command,mode);
415 if (isalnum(C) || isspace(C))
438 #if !defined(NOCOMPRESSED)
void NAMD_err(const char *err_msg)
int NAMD_open_text(const char *fname, int append)
void NAMD_quit(const char *err_msg)
void NAMD_write(int fd, const char *buf, size_t count, const char *fname)
std::ostream & endi(std::ostream &s)
const char * NAMD_version_string()
int NAMD_file_exists(const char *filename)
int NAMD_gcd(int a, int b)
char * NAMD_stringdup(const char *s)
void NAMD_bug(const char *err_msg)
void NAMD_close(int fd, const char *fname)
FILE * Fopen(const char *filename, const char *mode)
void NAMD_die(const char *err_msg)
void NAMD_backup_file(const char *filename, const char *extension)
std::ostream & iERROR(std::ostream &s)
void NAMD_version(int *major, int *minor, int *patchLevel, int *releaseType)