*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/smalloc.h"
-/* XDR should be available on all platforms now,
- * but we keep the possibility of turning it off...
- */
-#define USE_XDR
-
/* Use bitflag ... */
#define IS_SET(fn) ((fn.flag & ffSET) != 0)
#define IS_OPT(fn) ((fn.flag & ffOPT) != 0)
enum
{
- eftASC, eftBIN, eftXDR, eftTNG, eftGEN, eftNR
+ eftASC, eftXDR, eftTNG, eftGEN, eftNR
};
/* To support multiple file types with one general (eg TRX) we have
*/
static const int trxs[] =
{
-#ifdef USE_XDR
efXTC, efTRR, efCPT,
-#endif
efGRO, efG96, efPDB, efTNG
};
#define NTRXS asize(trxs)
static const int trcompressed[] =
{
-#ifdef USE_XDR
efXTC,
-#endif
efTNG
};
#define NTRCOMPRESSED asize(trcompressed)
static const int tros[] =
{
-#ifdef USE_XDR
efXTC, efTRR,
-#endif
efGRO, efG96, efPDB, efTNG
};
#define NTROS asize(tros)
static const int trns[] =
{
-#ifdef USE_XDR
efTRR, efCPT,
-#endif
efTNG
};
#define NTRNS asize(trns)
static const int stxs[] =
{
- efGRO, efG96, efPDB, efBRK, efENT, efESP
-#ifdef USE_XDR
- , efTPR
-#endif
+ efGRO, efG96, efPDB, efBRK, efENT, efESP,
+ efTPR
};
#define NSTXS asize(stxs)
static const int tpss[] =
{
-#ifdef USE_XDR
efTPR,
-#endif
efGRO, efG96, efPDB, efBRK, efENT
};
#define NTPSS asize(tpss)
{
case eftASC:
return "ASCII";
- case eftBIN:
- return "Binary";
case eftXDR:
return "XDR portable";
case eftTNG:
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
* To help us fund GROMACS development, we humbly ask that you cite
* the research papers on the package. Check out http://www.gromacs.org.
*/
-#ifndef GMX_FILEIO_GMXFIO_INT_H
-#define GMX_FILEIO_GMXFIO_INT_H
+/*! \internal \file
+ * \brief
+ * Internal definitions shared by gmxfio*.c files.
+ */
+#ifndef GMX_FILEIO_GMXFIO_IMPL_H
+#define GMX_FILEIO_GMXFIO_IMPL_H
/* This is the new improved and thread safe version of gmxfio. */
WARNING WARNING WARNING WARNING */
-
-/* XDR should be available on all platforms now,
- * but we keep the possibility of turning it off...
- */
-#define USE_XDR
-
#include "thread_mpi/lock.h"
#include "gromacs/fileio/xdrf.h"
-/* the reader/writer functions for t_iotype */
+/** the reader function for t_iotype */
typedef gmx_bool read_func (t_fileio *fio, void *item, int nitem, int eio,
const char *desc, const char *srcfile, int line);
+/** the writer function for t_iotype */
typedef gmx_bool write_func (t_fileio *fio, const void *item, int nitem, int eio,
const char *desc, const char *srcfile, int line);
-/* these are pointers to the actual reading & writing functions */
typedef struct
{
read_func *nread;
write_func *nwrite;
} t_iotype;
-
-
struct t_fileio
{
FILE *fp; /* the file pointer */
bRead, /* the file is open for reading */
bDouble, /* write doubles instead of floats */
bDebug, /* the file ops should come with debug info */
- bStdio, /* the file is actually stdin or stdout */
bReadWrite; /* the file is open for reading and writing */
char *fn; /* the file name */
XDR *xdr; /* the xdr data pointer */
enum xdr_op xdrmode; /* the xdr mode */
int iFTP; /* the file type identifier */
- const char *comment; /* a comment string for debugging */
-
t_fileio *next, *prev; /* next and previous file pointers in the
linked list */
tMPI_Lock_t mtx; /* content locking mutex. This is a fast lock
a lock */
};
-
-
-extern const t_iotype asc_iotype;
-extern const t_iotype bin_iotype;
+/** handlers for XDR read/write */
extern const t_iotype xdr_iotype;
-extern const t_iotype dummy_iotype;
+/** Names for different items that can be read/written with gmx_fio_do_*() */
extern const char *eioNames[eioNR];
-
-
-#define GMX_FIO_BUFLEN 256
-
-/* make a debug string if that is requested in the fio */
-const char *gmx_fio_dbgstr(t_fileio *fio, const char *desc, char *buf);
-/* check the number of items against the allowed number of items */
+/** check the number of items against the allowed number of items */
void gmx_fio_check_nitem(int eio, int nitem, const char *file,
int line);
-/* check the output type against allowed values */
+/** check the output type against allowed values */
void gmx_fio_fe(t_fileio *fio, int eio, const char *desc, const char *srcfile,
int line);
-/* lock/unlock the mutex associated with a fio */
+/** lock the mutex associated with a fio */
void gmx_fio_lock(t_fileio *fio);
+/** unlock the mutex associated with a fio */
void gmx_fio_unlock(t_fileio *fio);
#endif
#include "thread_mpi/threads.h"
#include "gromacs/fileio/filenm.h"
-#include "gromacs/fileio/gmxfio_int.h"
#include "gromacs/fileio/md5.h"
#include "gromacs/legacyheaders/macros.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/futil.h"
#include "gromacs/utility/smalloc.h"
-#include "gromacs/utility/snprintf.h"
+
+#include "gmxfio-impl.h"
/* This is the new improved and thread safe version of gmxfio. */
/* These simple lists define the I/O type for these files */
static const int ftpXDR[] =
{ efTPR, efTRR, efEDR, efXTC, efTNG, efMTX, efCPT };
-static const int ftpASC[] =
-{ efGRO, efPDB, efG96 };
-static const int ftpBIN[] =
-{ efTNG };
-#ifdef HAVE_XML
-static const int ftpXML[] =
-{ efXML};
-#endif
const char *eioNames[eioNR] =
{
"IVEC", "STRING"
};
+
+static gmx_bool do_dummyread(t_fileio *fio, void *item, int nitem, int eio,
+ const char *desc, const char *srcfile, int line);
+static gmx_bool do_dummywrite(t_fileio *fio, const void *item, int nitem, int eio,
+ const char *desc, const char *srcfile, int line);
+
+const t_iotype dummy_iotype = {do_dummyread, do_dummywrite};
+
+static gmx_bool do_dummyread(
+ t_fileio gmx_unused *fio, void gmx_unused *item, int gmx_unused nitem, int gmx_unused eio,
+ const char gmx_unused *desc, const char gmx_unused *srcfile, int gmx_unused line)
+{
+ gmx_fatal(FARGS, "File type not set!");
+ return FALSE;
+}
+
+static gmx_bool do_dummywrite(
+ t_fileio gmx_unused *fio, const void gmx_unused *item, int gmx_unused nitem, int gmx_unused eio,
+ const char gmx_unused *desc, const char gmx_unused *srcfile, int gmx_unused line)
+{
+ gmx_fatal(FARGS, "File type not set!");
+ return FALSE;
+}
+
/******************************************************************
*
* Internal functions:
}
-
-extern void gmx_fio_set_comment(t_fileio *fio, const char *comment)
-{
- fio->comment = comment;
-}
-
-extern void gmx_fio_unset_comment(t_fileio *fio)
-{
- fio->comment = NULL;
-}
-
-
-const char *gmx_fio_dbgstr(t_fileio *fio, const char *desc, char *buf)
-{
- if (!fio->bDebug)
- {
- /* set to empty string */
- buf[0] = 0;
- }
- else
- {
- snprintf(buf, GMX_FIO_BUFLEN, " ; %s %s", fio->comment ? fio->comment : "", desc);
- }
- return buf;
-}
-
-
/* check the number of items given against the type */
void gmx_fio_check_nitem(int eio, int nitem, const char *file, int line)
{
{
if (in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
{
-#ifdef USE_XDR
fio->iotp = &xdr_iotype;
-#else
- gmx_fatal(FARGS, "Sorry, no XDR");
-#endif
- }
- else if (in_ftpset(fio->iFTP, asize(ftpASC), ftpASC))
- {
- fio->iotp = &asc_iotype;
}
- else if (in_ftpset(fio->iFTP, asize(ftpBIN), ftpBIN))
- {
- fio->iotp = &bin_iotype;
- }
-#ifdef HAVE_XMl
- else if (in_ftpset(fio->iFTP, asize(ftpXML), ftpXML))
- {
- fio->iotp = &dummy_iotype;
- }
-#endif
else
{
fio->iotp = &dummy_iotype;
fio->xdr = NULL;
if (fn)
{
+ if (fn2ftp(fn) == efTNG)
+ {
+ gmx_incons("gmx_fio_open may not be used to open TNG files");
+ }
fio->iFTP = fn2ftp(fn);
fio->fn = gmx_strdup(fn);
- fio->bStdio = FALSE;
/* If this file type is in the list of XDR files, open it like that */
if (in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
gmx_open(fn);
}
}
- if (fn2ftp(fn) == efTNG)
- {
- gmx_incons("gmx_fio_open may not be used to open TNG files");
- }
/* Open the file */
fio->fp = gmx_ffopen(fn, newmode);
sfree(fio->xdr);
}
- /* Don't close stdin and stdout! */
- if (!fio->bStdio && fio->fp != NULL)
+ if (fio->fp != NULL)
{
rc = gmx_ffclose(fio->fp); /* fclose returns 0 if happy */
{
int rc = 0;
gmx_fio_lock(fio);
- if (!in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR) && !fio->bStdio)
+ if (!in_ftpset(fio->iFTP, asize(ftpXDR), ftpXDR))
{
rc = gmx_ffclose(fio->fp); /* fclose returns 0 if happy */
fio->fp = NULL;
{
/* Skip the checkpoint files themselves, since they could be open when
we call this routine... */
- /* also skip debug files (shoud be the only iFTP==efNR) */
- if (cur->bOpen &&
- !cur->bRead &&
- !cur->bStdio &&
- cur->iFTP != efCPT &&
- cur->iFTP != efNR)
+ if (cur->bOpen && !cur->bRead && cur->iFTP != efCPT)
{
int ret;
/* This is an output file currently open for writing, add it */
{
return;
}
- else if (in_ftpset(fio->iFTP, asize(ftpASC), ftpASC))
- {
- return;
- }
- else if (in_ftpset(fio->iFTP, asize(ftpBIN), ftpBIN))
- {
- return;
- }
-#ifdef HAVE_XMl
- else if (in_ftpset(fio->iFTP, asize(ftpXML), ftpXML))
- {
- return;
- }
-#endif
else
{
gmx_fatal(FARGS, "Can not read/write topologies to file type %s",
gmx_fio_unlock(fio);
}
-gmx_bool gmx_fio_getdebug(t_fileio *fio)
-{
- gmx_bool ret;
-
- gmx_fio_lock(fio);
- ret = fio->bDebug;
- gmx_fio_unlock(fio);
-
- return ret;
-}
-
void gmx_fio_setdebug(t_fileio *fio, gmx_bool bDebug)
{
gmx_fio_lock(fio);
cur = gmx_fio_get_first();
while (cur)
{
- /* skip debug files (shoud be the only iFTP==efNR) */
- if (cur->bOpen &&
- !cur->bRead &&
- !cur->bStdio &&
- cur->iFTP != efNR)
+ if (cur->bOpen && !cur->bRead)
{
/* if any of them fails, return failure code */
int rc = gmx_fio_int_fsync(cur);
return ret;
}
-int xtc_seek_frame(t_fileio *fio, int frame, int natoms)
-{
- int ret;
-
- gmx_fio_lock(fio);
- ret = xdr_xtc_seek_frame(frame, fio->fp, fio->xdr, natoms);
- gmx_fio_unlock(fio);
-
- return ret;
-}
-
int xtc_seek_time(t_fileio *fio, real time, int natoms, gmx_bool bSeekForwardOnly)
{
int ret;
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#endif
/* types */
-
-/* Enumerated for different items in files */
-enum {
- eitemHEADER, eitemIR, eitemBOX,
- eitemTOP, eitemX, eitemV, eitemF, eitemNR
-};
-
/* Enumerated for data types in files */
enum {
eioREAL, eioFLOAT, eioDOUBLE, eioINT, eioINT64,
void gmx_fio_setdebug(t_fileio *fio, gmx_bool bDebug);
/* Set the debug mode */
-gmx_bool gmx_fio_getdebug(t_fileio *fio);
-/* Return whether debug mode is on in fio */
-
gmx_bool gmx_fio_getread(t_fileio *fio);
/* Return whether read mode is on in fio */
unsigned char digest[]);
-int xtc_seek_frame(t_fileio *fio, int frame, int natoms);
-
int xtc_seek_time(t_fileio *fio, real time, int natoms, gmx_bool bSeekForwardOnly);
-/* Add this to the comment string for debugging */
-void gmx_fio_set_comment(t_fileio *fio, const char *comment);
-
-/* Remove previously set comment */
-void gmx_fio_unset_comment(t_fileio *fio);
-
-
-
-
/********************************************************
* Read and write
********************************************************/
-/* basic reading & writing */
-gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_int64(t_fileio *fio, gmx_int64_t *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
- const char *desc, const char *srcfile, int line);
-
-gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_int64(t_fileio *fio, gmx_int64_t item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
- const char *desc, const char *srcfile, int line);
gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
const char *desc, const char *srcfile, int line);
gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
const char *desc, const char *srcfile, int line);
-
-
-
/* array reading & writing */
-gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_int64(t_fileio *fio, gmx_int64_t *item, int n,
- const char *desc, const char *srcfile,
- int line);
-gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
- const char *desc, const char *srcfile, int line);
-
-gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_int64(t_fileio *fio,
- const gmx_int64_t *item, int n,
- const char *desc, const char *srcfile,
- int line);
-gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
- const char *desc, const char *srcfile, int line);
-gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
- const char *desc, const char *srcfile, int line);
-
gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
const char *desc, const char *srcfile, int line);
gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
/* convenience macros */
-#define gmx_fio_read_real(fio, item) gmx_fio_reade_real(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_float(fio, item) gmx_fio_reade_float(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_double(fio, item) gmx_fio_reade_double(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_int(fio, item) gmx_fio_reade_int(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_int64(fio, item) gmx_fio_reade_int64(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_uchar(fio, item) gmx_fio_reade_uchar(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_ushort(fio, item) gmx_fio_reade_ushort(fio, &item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_rvec(fio, item) gmx_fio_reade_rvec(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_ivec(fio, item) gmx_fio_reade_ivec(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_read_string(fio, item) gmx_fio_reade_string(fio, item, (#item), __FILE__, __LINE__)
-
-#define gmx_fio_write_real(fio, item) gmx_fio_writee_real(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_float(fio, item) gmx_fio_writee_float(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_double(fio, item) gmx_fio_writee_double(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_int(fio, item) gmx_fio_writee_int(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_int64(fio, item) gmx_fio_writee_int64(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_uchar(fio, item) gmx_fio_writee_uchar(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_ushort(fio, item) gmx_fio_writee_ushort(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_rvec(fio, item) gmx_fio_writee_rvec(fio, item, (#item), __FILE__, __LINE__)
-#define gmx_fio_write_ivec(fio, item) gmx_fio_writee_ivec(fio, item, (#item), __FILE__, __LINE__)
#define gmx_fio_write_string(fio, item) gmx_fio_writee_string(fio, item, (#item), __FILE__, __LINE__)
#define gmx_fio_do_real(fio, item) gmx_fio_doe_real(fio, &item, (#item), __FILE__, __LINE__)
#define gmx_fio_do_string(fio, item) gmx_fio_doe_string(fio, item, (#item), __FILE__, __LINE__)
-
-
-#define gmx_fio_nread_real(fio, item, n) gmx_fio_nreade_real(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_float(fio, item, n) gmx_fio_nreade_float(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_double(fio, item, n) gmx_fio_nreade_double(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_int(fio, item, n) gmx_fio_nreade_int(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_int64(fio, item, n) gmx_fio_nreade_int64(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_uchar(fio, item, n) gmx_fio_nreade_uchar(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_ushort(fio, item, n) gmx_fio_nreade_ushort(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_rvec(fio, item, n) gmx_fio_nreade_rvec(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_ivec(fio, item, n) gmx_fio_nreade_ivec(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nread_string(fio, item, n) gmx_fio_nreade_string(fio, item, n, (#item), __FILE__, __LINE__)
-
-#define gmx_fio_nwrite_real(fio, item, n) gmx_fio_nwritee_real(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_float(fio, item, n) gmx_fio_nwritee_float(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_double(fio, item, n) gmx_fio_nwritee_double(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_int(fio, item, n) gmx_fio_nwritee_int(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_int64(fio, item, n) gmx_fio_nwritee_int64(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_uchar(fio, item, n) gmx_fio_nwritee_uchar(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_ushort(fio, item, n) gmx_fio_nwritee_ushort(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_rvec(fio, item, n) gmx_fio_nwritee_rvec(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_ivec(fio, item, n) gmx_fio_nwritee_ivec(fio, item, n, (#item), __FILE__, __LINE__)
-#define gmx_fio_nwrite_string(fio, item, n) gmx_fio_nwritee_string(fio, item, n, (#item), __FILE__, __LINE__)
-
#define gmx_fio_ndo_real(fio, item, n) gmx_fio_ndoe_real(fio, item, n, (#item), __FILE__, __LINE__)
#define gmx_fio_ndo_float(fio, item, n) gmx_fio_ndoe_float(fio, item, n, (#item), __FILE__, __LINE__)
#define gmx_fio_ndo_double(fio, item, n) gmx_fio_ndoe_double(fio, item, n, (#item), __FILE__, __LINE__)
+++ /dev/null
-/*
- * This file is part of the GROMACS molecular simulation package.
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
- * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
- * and including many others, as listed in the AUTHORS file in the
- * top-level source directory and at http://www.gromacs.org.
- *
- * GROMACS is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1
- * of the License, or (at your option) any later version.
- *
- * GROMACS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GROMACS; if not, see
- * http://www.gnu.org/licenses, or write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * If you want to redistribute modifications to GROMACS, please
- * consider that scientific software is very special. Version
- * control is crucial - bugs must be traceable. We will be happy to
- * consider code for inclusion in the official distribution, but
- * derived work must not be called official GROMACS. Details are found
- * in the README & COPYING files - if they are missing, get the
- * official version at http://www.gromacs.org.
- *
- * To help us fund GROMACS development, we humbly ask that you cite
- * the research papers on the package. Check out http://www.gromacs.org.
- */
-#include "gmxpre.h"
-
-#include "config.h"
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-
-#include "gromacs/fileio/filenm.h"
-#include "gromacs/fileio/gmxfio.h"
-#include "gromacs/fileio/gmxfio_int.h"
-#include "gromacs/fileio/md5.h"
-#include "gromacs/legacyheaders/macros.h"
-#include "gromacs/utility/cstringutil.h"
-#include "gromacs/utility/fatalerror.h"
-#include "gromacs/utility/futil.h"
-#include "gromacs/utility/smalloc.h"
-
-
-/* This is the part that reads dummy and ascii files. */
-
-
-
-
-/* file type functions */
-static gmx_bool do_ascread(t_fileio *fio, void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-static gmx_bool do_ascwrite(t_fileio *fio, const void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-static gmx_bool do_dummyread(t_fileio *fio, void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-static gmx_bool do_dummywrite(t_fileio *fio, const void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-
-
-const t_iotype asc_iotype = {do_ascread, do_ascwrite};
-const t_iotype dummy_iotype = {do_dummyread, do_dummywrite};
-
-
-
-
-
-
-static gmx_bool do_dummyread(t_fileio gmx_unused *fio, void gmx_unused *item, int gmx_unused nitem, int gmx_unused eio,
- const char gmx_unused *desc, const char gmx_unused *srcfile, int gmx_unused line)
-{
- gmx_fatal(FARGS, "File type not set!");
- return FALSE;
-}
-
-static gmx_bool do_dummywrite(t_fileio gmx_unused *fio, const void gmx_unused *item, int gmx_unused nitem, int gmx_unused eio,
- const char gmx_unused *desc, const char gmx_unused *srcfile, int gmx_unused line)
-{
- gmx_fatal(FARGS, "File type not set!");
- return FALSE;
-}
-
-
-
-static void encode_string(int maxlen, char dst[], const char src[])
-{
- int i;
-
- for (i = 0; (i < maxlen - 1) && (src[i] != '\0'); i++)
- {
- if ((src[i] == ' ') || (src[i] == '\t'))
- {
- dst[i] = '_';
- }
- else
- {
- dst[i] = src[i];
- }
- }
- dst[i] = '\0';
-
- if (i == maxlen)
- {
- fprintf(stderr, "String '%s' truncated to '%s'\n", src, dst);
- }
-}
-
-static void decode_string(int maxlen, char dst[], const char src[])
-{
- int i;
-
- for (i = 0; (i < maxlen - 1) && (src[i] != '\0'); i++)
- {
- if (src[i] == '_')
- {
- dst[i] = ' ';
- }
- else
- {
- dst[i] = src[i];
- }
- }
- dst[i] = '\0';
-
- if (i == maxlen)
- {
- fprintf(stderr, "String '%s' truncated to '%s'\n", src, dst);
- }
-}
-
-static gmx_bool do_ascwrite(t_fileio *fio, const void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line)
-{
- int i;
- int res = 0, *iptr;
- real *ptr;
- char strbuf[256];
- char buf[GMX_FIO_BUFLEN];
- unsigned char *ucptr;
- FILE *fp = fio->fp;
-
- gmx_fio_check_nitem(eio, nitem, srcfile, line);
- switch (eio)
- {
- case eioREAL:
- case eioFLOAT:
- case eioDOUBLE:
- res = fprintf(fp, "%18.10e%s\n", *((real *) item),
- gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioINT:
- res = fprintf(fp, "%18d%s\n", *((int *) item), gmx_fio_dbgstr(fio,
- desc,
- buf));
- break;
- case eioINT64:
- sprintf(strbuf, "%s%s%s", "%", GMX_PRId64, "\n");
- res = fprintf(fp, strbuf, *((gmx_int64_t *) item),
- gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioUCHAR:
- res = fprintf(fp, "%4d%s\n", *((unsigned char *) item),
- gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioNUCHAR:
- ucptr = (unsigned char *) item;
- for (i = 0; (i < nitem); i++)
- {
- res = fprintf(fp, "%4d", (int) ucptr[i]);
- }
- fprintf(fio->fp, "%s\n", gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioUSHORT:
- res = fprintf(fp, "%18d%s\n", *((unsigned short *) item),
- gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioRVEC:
- ptr = (real *) item;
- res = fprintf(fp, "%18.10e%18.10e%18.10e%s\n", ptr[XX],
- ptr[YY], ptr[ZZ], gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioNRVEC:
- for (i = 0; (i < nitem); i++)
- {
- ptr = ((rvec *) item)[i];
- res = fprintf(fp, "%18.10e%18.10e%18.10e%s\n", ptr[XX],
- ptr[YY], ptr[ZZ], gmx_fio_dbgstr(fio, desc, buf));
- }
- break;
- case eioIVEC:
- iptr = (int *) item;
- res = fprintf(fp, "%18d%18d%18d%s\n", iptr[XX], iptr[YY],
- iptr[ZZ], gmx_fio_dbgstr(fio, desc, buf));
- break;
- case eioSTRING:
- encode_string(256, strbuf, (char *) item);
- res = fprintf(fp, "%-18s%s\n", strbuf, gmx_fio_dbgstr(fio, desc, buf));
- break;
- default:
- gmx_fio_fe(fio, eio, desc, srcfile, line);
- }
- if ((res <= 0) && fio->bDebug)
- {
- fprintf(stderr,
- "Error writing %s %s to file %s (source %s, line %d)\n",
- eioNames[eio], desc, fio->fn, srcfile, line);
- }
-
- return (res > 0);
-}
-
-
-static char *next_item(FILE *fp, char *buf, int buflen)
-{
- int rd;
- gmx_bool in_comment = FALSE;
- gmx_bool in_token = FALSE;
- int i = 0;
- /* This routine reads strings from the file fp, strips comment
- * and buffers. For thread-safety reasons, It reads through getc() */
-
- rd = getc(fp);
- if (rd == EOF)
- {
- gmx_file("End of file");
- }
- do
- {
- if (in_comment)
- {
- if (rd == '\n')
- {
- in_comment = FALSE;
- }
- }
- else if (in_token)
- {
- if (isspace(rd) || rd == ';')
- {
- break;
- }
- buf[i++] = (char) rd;
- }
- else
- {
- if (!isspace(rd))
- {
- if (rd == ';')
- {
- in_comment = TRUE;
- }
- else
- {
- in_token = TRUE;
- buf[i++] = (char) (rd);
- }
- }
- }
- if (i >= buflen - 2)
- {
- break;
- }
- }
- while ((rd = getc(fp)) != EOF);
-
- fprintf(stderr, "WARNING, ftpASC file type not tested!\n");
-
- buf[i] = 0;
-
- return buf;
-}
-
-static gmx_bool do_ascread(t_fileio *fio, void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line)
-{
- FILE *fp = fio->fp;
- int i, m, res = 0, *iptr, ix;
- gmx_int64_t s;
- double d, x;
- char c;
- real *ptr;
- unsigned char *ucptr;
- char *cptr;
-#define NEXT_ITEM_BUF_LEN 128
- char ni_buf[NEXT_ITEM_BUF_LEN];
-
- gmx_fio_check_nitem(eio, nitem, srcfile, line);
- switch (eio)
- {
- case eioREAL:
- case eioFLOAT:
- case eioDOUBLE:
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%lf", &d);
- if (item)
- {
- *((real *) item) = d;
- }
- break;
- case eioINT:
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%d", &i);
- if (item)
- {
- *((int *) item) = i;
- }
- break;
- case eioINT64:
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN),
- "%"GMX_SCNd64, &s);
- if (item)
- {
- *((gmx_int64_t *) item) = s;
- }
- break;
- case eioUCHAR:
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%c", &c);
- if (item)
- {
- *((unsigned char *) item) = (unsigned char)c;
- }
- break;
- case eioNUCHAR:
- ucptr = (unsigned char *) item;
- for (i = 0; (i < nitem); i++)
- {
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%d", &ix);
- if (item)
- {
- ucptr[i] = ix;
- }
- }
- break;
- case eioUSHORT:
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%d", &i);
- if (item)
- {
- *((unsigned short *) item) = i;
- }
- break;
- case eioRVEC:
- ptr = (real *) item;
- for (m = 0; (m < DIM); m++)
- {
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%lf\n", &x);
- ptr[m] = x;
- }
- break;
- case eioNRVEC:
- assert(item);
- for (i = 0; (i < nitem); i++)
- {
- ptr = ((rvec *) item)[i];
- for (m = 0; (m < DIM); m++)
- {
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%lf\n",
- &x);
- ptr[m] = x;
- }
- }
- break;
- case eioIVEC:
- iptr = (int *) item;
- for (m = 0; (m < DIM); m++)
- {
- res = sscanf(next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN), "%d\n", &ix);
- if (item)
- {
- iptr[m] = ix;
- }
- }
- break;
- case eioSTRING:
- cptr = next_item(fp, ni_buf, NEXT_ITEM_BUF_LEN);
- if (item)
- {
- decode_string(strlen(cptr) + 1, (char *) item, cptr);
- /* res = sscanf(cptr,"%s",(char *)item);*/
- res = 1;
- }
- break;
- default:
- gmx_fio_fe(fio, eio, desc, srcfile, line);
- }
-
- if ((res <= 0) && fio->bDebug)
- {
- fprintf(stderr,
- "Error reading %s %s from file %s (source %s, line %d)\n",
- eioNames[eio], desc, fio->fn, srcfile, line);
- }
- return (res > 0);
-}
+++ /dev/null
-/*
- * This file is part of the GROMACS molecular simulation package.
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
- * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
- * and including many others, as listed in the AUTHORS file in the
- * top-level source directory and at http://www.gromacs.org.
- *
- * GROMACS is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1
- * of the License, or (at your option) any later version.
- *
- * GROMACS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GROMACS; if not, see
- * http://www.gnu.org/licenses, or write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * If you want to redistribute modifications to GROMACS, please
- * consider that scientific software is very special. Version
- * control is crucial - bugs must be traceable. We will be happy to
- * consider code for inclusion in the official distribution, but
- * derived work must not be called official GROMACS. Details are found
- * in the README & COPYING files - if they are missing, get the
- * official version at http://www.gromacs.org.
- *
- * To help us fund GROMACS development, we humbly ask that you cite
- * the research papers on the package. Check out http://www.gromacs.org.
- */
-#include "gmxpre.h"
-
-#include "config.h"
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-
-#include "gromacs/fileio/filenm.h"
-#include "gromacs/fileio/gmxfio.h"
-#include "gromacs/fileio/gmxfio_int.h"
-#include "gromacs/fileio/md5.h"
-#include "gromacs/legacyheaders/macros.h"
-#include "gromacs/utility/futil.h"
-#include "gromacs/utility/smalloc.h"
-
-/* This is the part that reads dummy and ascii files. */
-
-
-static gmx_bool do_binread(t_fileio *fio, void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-static gmx_bool do_binwrite(t_fileio *fio, const void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line);
-
-
-const t_iotype bin_iotype = {do_binread, do_binwrite};
-
-
-static gmx_bool do_binwrite(t_fileio *fio, const void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line)
-{
- size_t size = 0, wsize;
- int ssize;
-
- gmx_fio_check_nitem(eio, nitem, srcfile, line);
- switch (eio)
- {
- case eioREAL:
- size = sizeof(real);
- break;
- case eioFLOAT:
- size = sizeof(float);
- break;
- case eioDOUBLE:
- size = sizeof(double);
- break;
- case eioINT:
- size = sizeof(int);
- break;
- case eioINT64:
- size = sizeof(gmx_int64_t);
- break;
- case eioUCHAR:
- size = sizeof(unsigned char);
- break;
- case eioNUCHAR:
- size = sizeof(unsigned char);
- break;
- case eioUSHORT:
- size = sizeof(unsigned short);
- break;
- case eioRVEC:
- size = sizeof(rvec);
- break;
- case eioNRVEC:
- size = sizeof(rvec);
- break;
- case eioIVEC:
- size = sizeof(ivec);
- break;
- case eioSTRING:
- size = ssize = strlen((char *) item) + 1;
- do_binwrite(fio, &ssize, 1, eioINT, desc, srcfile, line);
- break;
- default:
- gmx_fio_fe(fio, eio, desc, srcfile, line);
- }
-
- wsize = fwrite(item, size, nitem, fio->fp);
-
- if ((wsize != nitem) && fio->bDebug)
- {
- fprintf(stderr,
- "Error writing %s %s to file %s (source %s, line %d)\n",
- eioNames[eio], desc, fio->fn, srcfile, line);
- fprintf(stderr, "written size %u bytes, source size %u bytes\n",
- (unsigned int) wsize, (unsigned int) size);
- }
- return (wsize == nitem);
-}
-
-static gmx_bool do_binread(t_fileio *fio, void *item, int nitem, int eio,
- const char *desc, const char *srcfile, int line)
-{
- size_t size = 0, rsize;
- int ssize;
-
- gmx_fio_check_nitem(eio, nitem, srcfile, line);
- switch (eio)
- {
- case eioREAL:
- if (fio->bDouble)
- {
- size = sizeof(double);
- }
- else
- {
- size = sizeof(float);
- }
- break;
- case eioFLOAT:
- size = sizeof(float);
- break;
- case eioDOUBLE:
- size = sizeof(double);
- break;
- case eioINT:
- size = sizeof(int);
- break;
- case eioINT64:
- size = sizeof(gmx_int64_t);
- break;
- case eioUCHAR:
- size = sizeof(unsigned char);
- break;
- case eioNUCHAR:
- size = sizeof(unsigned char);
- break;
- case eioUSHORT:
- size = sizeof(unsigned short);
- break;
- case eioRVEC:
- case eioNRVEC:
- if (fio->bDouble)
- {
- size = sizeof(double) * DIM;
- }
- else
- {
- size = sizeof(float) * DIM;
- }
- break;
- case eioIVEC:
- size = sizeof(ivec);
- break;
- case eioSTRING:
- do_binread(fio, &ssize, 1, eioINT, desc, srcfile, line);
- size = ssize;
- break;
- default:
- gmx_fio_fe(fio, eio, desc, srcfile, line);
- }
- if (item)
- {
- rsize = fread(item, size, nitem, fio->fp);
- }
- else
- {
- /* Skip over it if we have a NULL pointer here */
- gmx_fseek(fio->fp, (gmx_off_t)(size*nitem), SEEK_CUR);
- rsize = nitem;
- }
- if ((rsize != nitem) && (fio->bDebug))
- {
- fprintf(stderr,
- "Error reading %s %s from file %s (source %s, line %d)\n",
- eioNames[eio], desc, fio->fn, srcfile, line);
- }
-
- return (rsize == nitem);
-}
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
*/
#include "gmxpre.h"
-#include "config.h"
-
-#include <errno.h>
-#include <stdio.h>
-
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-
-#include "gromacs/fileio/filenm.h"
#include "gromacs/fileio/gmxfio.h"
-#include "gromacs/fileio/gmxfio_int.h"
-#include "gromacs/fileio/md5.h"
-#include "gromacs/legacyheaders/macros.h"
-#include "gromacs/utility/futil.h"
-#include "gromacs/utility/smalloc.h"
+#include "gmxfio-impl.h"
/*******************************************************************
*
*
*******************************************************************/
-gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_int64(t_fileio *fio, gmx_int64_t *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-/* Write */
-
-gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_int64(t_fileio *fio, gmx_int64_t item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioINT64, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
const char *desc, const char *srcfile, int line)
{
return ret;
}
-
-
-/* Read/write functions */
-
gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
const char *desc, const char *srcfile, int line)
{
}
-
-
-
-
-
/* Array reading & writing */
-gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_int64(t_fileio *fio, gmx_int64_t *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-
-
-/* Array writing */
-
-gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
- line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_int64(t_fileio *fio,
- const gmx_int64_t *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64,
- desc, srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret;
- gmx_fio_lock(fio);
- ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
- gmx_fio_unlock(fio);
- return ret;
-}
-
-gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
- srcfile, line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
- const char *desc, const char *srcfile, int line)
-{
- gmx_bool ret = TRUE;
- int i;
- gmx_fio_lock(fio);
- for (i = 0; i < n; i++)
- {
- ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
- line);
- }
- gmx_fio_unlock(fio);
- return ret;
-}
-
-
-
-/* array read/write functions */
-
gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
const char *desc, const char *srcfile, int line)
{
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
*/
#include "gmxpre.h"
-#include "config.h"
-
-#include <errno.h>
#include <stdio.h>
#include <string.h>
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-
-#include "gromacs/fileio/filenm.h"
#include "gromacs/fileio/gmxfio.h"
-#include "gromacs/fileio/gmxfio_int.h"
-#include "gromacs/fileio/md5.h"
-#include "gromacs/legacyheaders/macros.h"
+#include "gromacs/fileio/xdrf.h"
#include "gromacs/utility/fatalerror.h"
-#include "gromacs/utility/futil.h"
#include "gromacs/utility/smalloc.h"
-/* This is the part that reads xdr files. */
+#include "gmxfio-impl.h"
+/* This is the part that reads xdr files. */
/* file type functions */
static gmx_bool do_xdrread(t_fileio *fio, void *item, int nitem, int eio,
const t_iotype xdr_iotype = {do_xdrread, do_xdrwrite};
-#ifdef USE_XDR
-
static gmx_bool do_xdr(t_fileio *fio, void *item, int nitem, int eio,
const char *desc, const char *srcfile, int line)
{
void *it = (void*)item; /* ugh.. */
return do_xdr(fio, it, nitem, eio, desc, srcfile, line);
}
-
-#endif
int idum;
real rdum;
- if (!bRead)
- {
- gmx_fio_set_comment(fio, interaction_function[ftype].name);
- }
switch (ftype)
{
case F_ANGLES:
gmx_fatal(FARGS, "unknown function type %d (%s) in %s line %d",
ftype, interaction_function[ftype].name, __FILE__, __LINE__);
}
- if (!bRead)
- {
- gmx_fio_unset_comment(fio);
- }
}
-static void do_ilist(t_fileio *fio, t_ilist *ilist, gmx_bool bRead, int file_version,
- int ftype)
+static void do_ilist(t_fileio *fio, t_ilist *ilist, gmx_bool bRead, int file_version)
{
int i, k, idum;
- if (!bRead)
- {
- gmx_fio_set_comment(fio, interaction_function[ftype].name);
- }
if (file_version < 44)
{
for (i = 0; i < MAXNODES; i++)
snew(ilist->iatoms, ilist->nr);
}
gmx_fio_ndo_int(fio, ilist->iatoms, ilist->nr);
- if (!bRead)
- {
- gmx_fio_unset_comment(fio);
- }
}
static void do_ffparams(t_fileio *fio, gmx_ffparams_t *ffparams,
}
else
{
- do_ilist(fio, &ilist[j], bRead, file_version, j);
+ do_ilist(fio, &ilist[j], bRead, file_version);
if (file_version < 78 && j == F_SETTLE && ilist[j].nr > 0)
{
add_settle_atoms(&ilist[j]);
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
return *bOK;
}
-void pr_trnheader(FILE *fp, int indent, char *title, t_trnheader *sh)
-{
- if (sh)
- {
- indent = pr_title(fp, indent, title);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "box_size = %d\n", sh->box_size);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "x_size = %d\n", sh->x_size);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "v_size = %d\n", sh->v_size);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "f_size = %d\n", sh->f_size);
-
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "natoms = %d\n", sh->natoms);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "step = %d\n", sh->step);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "t = %e\n", sh->t);
- (void) pr_indent(fp, indent);
- (void) fprintf(fp, "lambda = %e\n", sh->lambda);
- }
-}
-
static gmx_bool do_htrn(t_fileio *fio, t_trnheader *sh,
rvec *box, rvec *x, rvec *v, rvec *f)
{
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
/* Read the header of a trn file from fn, and close the file afterwards.
*/
-void pr_trnheader(FILE *fp, int indent, char *title, t_trnheader *sh);
-/* Print the header of a trn file to fp */
-
-gmx_bool is_trn(FILE *fp);
-/* Return true when the file is a trn file. File will be rewound
- * afterwards.
- */
-
void fwrite_trn(t_fileio *fio, int step, real t, real lambda,
rvec *box, int natoms, rvec *x, rvec *v, rvec *f);
/* Write a trn frame to file fp, box, x, v, f may be NULL */