11 #if !defined(WIN32) || defined(__CYGWIN__) 28 #if defined(WIN32) && !defined(__CYGWIN__) 30 #define access(PATH,MODE) _access(PATH,00) 39 int write(
int fd,
const void* buf,
int count)
41 return write(fd,(
void*)buf,(
size_t)count);
44 int stat(
const char* fn,
struct stat* buf)
46 return stat((
char*)fn, buf);
57 void NAMD_version(
int *major,
int *minor,
int *patchLevel,
int *releaseType)
61 int NAMD_patchLevel = 0;
70 int n = sscanf(vstr,
"%d%3[^0-9]%d%7[^0-9]%d%c",
71 &NAMD_major, dot, &NAMD_minor, release, &NAMD_patchLevel, extra);
73 NAMD_bug(
"Unable to parse NAMD_VERSION from Makefile");
76 if (strcmp(release,
"a") == 0 || strcmp(release,
"alpha") == 0) {
79 else if (strcmp(release,
"b") == 0 || strcmp(release,
"beta") == 0) {
82 else if (strcmp(release,
".") == 0 ||
83 strcmp(release,
"final") == 0 ||
84 strcmp(release,
"release") == 0 ||
85 strcmp(release,
"patch") == 0) {
89 NAMD_bug(
"Unable to parse NAMD_VERSION from Makefile");
96 if (major != NULL) *major = NAMD_major;
97 if (minor != NULL) *minor = NAMD_minor;
98 if (patchLevel != NULL) *patchLevel = NAMD_patchLevel;
99 if (releaseType != NULL) *releaseType = NAMD_releaseType;
105 if(a == 0 || b == 0)
return 0;
106 else if(a == b)
return a;
107 else if(a > b)
return NAMD_gcd(a-b,b);
118 rs =
new char[strlen(s) + 1];
128 if ( ! err_msg ) err_msg =
"(unknown error)";
129 CkPrintf(
"EXITING: %s\n", err_msg);
131 char repstr[24] =
"";
132 if (CmiNumPartitions() > 1
133 ||
Node::Object()->simParameters->CUDASOAintegrateMode) {
134 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
136 CkAbort(
"%sEXITING: %s\n", repstr, err_msg);
138 CkError(
"%sEXITING: %s\n", repstr, err_msg);
139 #if CHARM_VERSION < 61000 150 if ( ! err_msg ) err_msg =
"(unknown error)";
151 CkPrintf(
"FATAL ERROR: %s\n", err_msg);
153 char repstr[24] =
"";
154 if (CmiNumPartitions() > 1 ||
157 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
159 CkAbort(
"%sFATAL ERROR: %s\n", repstr, err_msg);
161 CkError(
"%sFATAL ERROR: %s\n", repstr, err_msg);
162 #if CHARM_VERSION < 61000 173 if ( ! err_msg ) err_msg =
"(unknown error)";
174 const char *sys_err_msg = strerror(errno);
175 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
176 CkPrintf(
"FATAL ERROR: %s: %s\n", err_msg, sys_err_msg);
178 char repstr[24] =
"";
179 if (CmiNumPartitions() > 1 ||
182 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
184 CkAbort(
"%sFATAL ERROR: %s: %s\n", repstr, err_msg, sys_err_msg);
186 CkError(
"%sFATAL ERROR: %s: %s\n", repstr, err_msg, sys_err_msg);
187 #if CHARM_VERSION < 61000 198 if ( ! err_msg ) err_msg =
"(unknown error)";
199 const char *bug_msg =
200 "FATAL ERROR: See http://www.ks.uiuc.edu/Research/namd/bugreport.html";
201 CkPrintf(
"FATAL ERROR: %s\n%s\n",err_msg, bug_msg);
203 char repstr[24] =
"";
204 if (CmiNumPartitions() > 1 ||
207 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
209 CkAbort(
"%sFATAL ERROR: %s\n%s\n", repstr, err_msg, bug_msg);
211 CkError(
"%sFATAL ERROR: %s\n%s\n", repstr, err_msg, bug_msg);
212 #if CHARM_VERSION < 61000 223 rval = access(filename, F_OK);
224 }
while ( rval != 0 && errno == EINTR );
225 if ( rval != 0 && errno != ENOENT ) {
226 const char *sys_err_msg = strerror(errno);
227 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
229 << filename <<
": " << sys_err_msg <<
"\n" <<
endi;
239 if ( ! extension ) extension =
".BAK";
240 char *backup =
new char[strlen(filename)+strlen(extension)+1];
241 strcpy(backup, filename);
242 strcat(backup, extension);
243 #if defined(WIN32) && !defined(__CYGWIN__) 244 if (
remove(backup) )
if ( errno != ENOENT ) {
245 char *sys_err_msg = strerror(errno);
246 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
248 << backup <<
": " << sys_err_msg <<
"\n" <<
endi;
252 while ( rename(filename,backup) )
254 if ( errno == EINTR )
continue;
255 const char *sys_err_msg = strerror(errno);
256 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
257 iout <<
iERROR <<
"Error on renaming file " << filename
258 <<
" to " << backup <<
": " << sys_err_msg <<
"\n" <<
endi;
260 if ( errno == EXDEV )
continue;
275 #if defined(WIN32) && !defined(__CYGWIN__) 276 while ( (fd = _open(fname, O_WRONLY|(append?O_APPEND:O_EXCL)|O_CREAT|O_TEXT,_S_IREAD|_S_IWRITE)) < 0) {
278 #ifdef NAMD_NO_O_EXCL 279 while ( (fd = open(fname, O_WRONLY|(append?O_APPEND:O_TRUNC)|O_CREAT,
281 while ( (fd = open(fname, O_WRONLY|(append?O_APPEND:O_EXCL)|O_CREAT,
283 S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0) {
285 if ( errno != EINTR ) {
287 sprintf(errmsg,
"Unable to open text file %s", fname);
296 void NAMD_write(
int fd,
const char *buf,
size_t count,
const char *fname) {
298 #if defined(WIN32) && !defined(__CYGWIN__) 299 long retval = _write(fd,buf,count);
301 ssize_t retval = write(fd,buf,count);
303 if ( retval < 0 && errno == EINTR ) retval = 0;
306 sprintf(errmsg,
"Error on writing to file %s", fname);
309 if ( retval > count )
NAMD_bug(
"extra bytes written in NAMD_write()");
317 #if defined(WIN32) && !defined(__CYGWIN__) 318 while ( _close(fd) ) {
320 while ( close(fd) ) {
322 if ( errno != EINTR ) {
324 sprintf(errmsg,
"Error on closing file %s", fname);
342 FILE *
Fopen (
const char *filename,
const char *mode)
347 #if defined(NOCOMPRESSED) 348 if (!stat(filename,&buf))
351 while ( ! (rval = fopen(filename,mode)) ) {
352 if ( errno != EINTR )
break;
357 if (!stat(filename,&buf))
359 if (!S_ISDIR(buf.st_mode)) {
361 while ( ! (rval = fopen(filename,mode)) ) {
362 if ( errno != EINTR )
break;
371 command = (
char *)malloc(strlen(filename)+25);
373 sprintf(command,
"zcat %s.Z",filename);
374 realfilename = command+5;
375 iout <<
"Command = " << command <<
"\n" <<
endi;
376 iout <<
"Filename.Z = " << realfilename <<
"\n" <<
endi;
377 if (!stat(realfilename,&buf))
379 if (!S_ISDIR(buf.st_mode))
381 fout = popen(command,mode);
389 if (isalnum(C) || isspace(C))
400 sprintf(command,
"gzip -d -c %s.gz",filename);
401 realfilename = command+11;
402 iout <<
"Command = " << command <<
"\n" <<
endi;
403 iout <<
"Filename.gz = " << realfilename <<
"\n" <<
endi;
404 if (!stat(realfilename,&buf))
406 if (!S_ISDIR(buf.st_mode))
408 fout = popen(command,mode);
416 if (isalnum(C) || isspace(C))
439 #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)