Remove .tpa, .tpb, .tpx, .trj files. Part of #1500.
[alexxy/gromacs.git] / src / gromacs / fileio / gmxfio.h
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5  * Copyright (c) 2001-2004, The GROMACS development team.
6  * Copyright (c) 2013,2014, by the GROMACS development team, led by
7  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8  * and including many others, as listed in the AUTHORS file in the
9  * top-level source directory and at http://www.gromacs.org.
10  *
11  * GROMACS is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public License
13  * as published by the Free Software Foundation; either version 2.1
14  * of the License, or (at your option) any later version.
15  *
16  * GROMACS is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with GROMACS; if not, see
23  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
25  *
26  * If you want to redistribute modifications to GROMACS, please
27  * consider that scientific software is very special. Version
28  * control is crucial - bugs must be traceable. We will be happy to
29  * consider code for inclusion in the official distribution, but
30  * derived work must not be called official GROMACS. Details are found
31  * in the README & COPYING files - if they are missing, get the
32  * official version at http://www.gromacs.org.
33  *
34  * To help us fund GROMACS development, we humbly ask that you cite
35  * the research papers on the package. Check out http://www.gromacs.org.
36  */
37
38 #ifndef GMX_FILEIO_GMXFIO_H
39 #define GMX_FILEIO_GMXFIO_H
40
41 #include <stdio.h>
42
43 #include "../utility/cstringutil.h"
44 #include "../utility/futil.h"
45 #include "../utility/real.h"
46 #include "../math/vectypes.h"
47
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 /* types */
52
53
54 /* Enumerated for different items in files */
55 enum {
56     eitemHEADER, eitemIR, eitemBOX,
57     eitemTOP, eitemX, eitemV, eitemF, eitemNR
58 };
59
60 /* Enumerated for data types in files */
61 enum {
62     eioREAL, eioFLOAT, eioDOUBLE, eioINT, eioINT64,
63     eioUCHAR, eioNUCHAR, eioUSHORT,
64     eioRVEC, eioNRVEC, eioIVEC, eioSTRING, eioNR
65 };
66
67 typedef struct t_fileio t_fileio;
68
69 /* NOTE ABOUT THREAD SAFETY:
70
71    The functions are all thread-safe, provided that two threads don't
72    do something silly like closing the same file, or one thread
73    accesses a file that has been closed by another.
74  */
75
76 /********************************************************
77  * Open and Close
78  ********************************************************/
79
80 t_fileio *gmx_fio_open(const char *fn, const char *mode);
81 /* Open a new file for reading or writing.
82  * The file type will be deduced from the file name.
83  */
84
85 int gmx_fio_close(t_fileio *fp);
86 /* Close the file corresponding to fp (if not stdio)
87  * The routine will exit when an invalid fio is handled.
88  * Returns 0 on success.
89  */
90
91 int gmx_fio_fp_close(t_fileio *fp);
92 /* Close the file corresponding to fp without closing the FIO entry
93  * Needed e.g. for trxio because the FIO entries are used to store
94  * additional data.
95  * NOTE that the fp still needs to be properly closed with gmx_fio_close().
96  * The routine will exit when an invalid fio is handled.
97  * Returns 0 on success.
98  */
99
100
101 /* Open a file, return a stream, record the entry in internal FIO object */
102 FILE* gmx_fio_fopen(const char *fn, const char *mode);
103
104 /* Close a file previously opened with gmx_fio_fopen.
105  * Do not mix these calls with standard fopen/fclose ones!
106  * Returns 0 on success.  */
107 int gmx_fio_fclose(FILE *fp);
108
109
110
111 /********************************************************
112  * Change properties of the open file
113  ********************************************************/
114
115 void gmx_fio_setprecision(t_fileio *fio, gmx_bool bDouble);
116 /* Select the floating point precision for reading and writing files */
117
118 char *gmx_fio_getname(t_fileio *fio);
119 /* Return the filename corresponding to the fio index */
120
121 int gmx_fio_getftp(t_fileio *fio);
122 /* Return the filetype corresponding to the fio index.
123     There is as of now no corresponding setftp function because the file
124     was opened as a specific file type and changing that midway is most
125     likely an evil hack. */
126
127 void gmx_fio_setdebug(t_fileio *fio, gmx_bool bDebug);
128 /* Set the debug mode */
129
130 gmx_bool gmx_fio_getdebug(t_fileio *fio);
131 /* Return  whether debug mode is on in fio  */
132
133 gmx_bool gmx_fio_getread(t_fileio *fio);
134 /* Return  whether read mode is on in fio  */
135
136
137 void gmx_fio_checktype(t_fileio *fio);
138 /* Check whether the fio is of a sane type */
139
140 /***************************************************
141  * FILE Operations
142  ***************************************************/
143
144 void gmx_fio_rewind(t_fileio *fio);
145 /* Rewind the file in fio */
146
147 int gmx_fio_flush(t_fileio *fio);
148 /* Flush the fio, returns 0 on success */
149
150 int gmx_fio_fsync(t_fileio *fio);
151 /* fsync the fio, returns 0 on success.
152    NOTE: don't use fsync function unless you're absolutely sure you need it
153    because it deliberately interferes with the OS's caching mechanisms and
154    can cause dramatically slowed down IO performance. Some OSes (Linux,
155    for example), may implement fsync as a full sync() point. */
156
157 gmx_off_t gmx_fio_ftell(t_fileio *fio);
158 /* Return file position if possible */
159
160 int gmx_fio_seek(t_fileio *fio, gmx_off_t fpos);
161 /* Set file position if possible, quit otherwise */
162
163 FILE *gmx_fio_getfp(t_fileio *fio);
164 /* Return the file pointer itself */
165
166
167 /* Element with information about position in a currently open file.
168  * gmx_off_t should be defined by autoconf if your system does not have it.
169  * If you do not have it on some other platform you do not have largefile
170  * support at all, and you can define it to int (or better, find out how to
171  * enable large files).  */
172 typedef struct
173 {
174     char          filename[STRLEN];
175     gmx_off_t     offset;
176     unsigned char chksum[16];
177     int           chksum_size;
178 }
179 gmx_file_position_t;
180
181 int gmx_fio_get_output_file_positions(gmx_file_position_t ** outputfiles,
182                                       int                   *nfiles );
183 /* Return the name and file pointer positions for all currently open
184  * output files. This is used for saving in the checkpoint files, so we
185  * can truncate output files upon restart-with-appending.
186  *
187  * For the first argument you should use a pointer, which will be set to
188  * point to a list of open files.
189  */
190
191 t_fileio *gmx_fio_all_output_fsync(void);
192 /* fsync all open output files. This is used for checkpointing, where
193    we need to ensure that all output is actually written out to
194    disk.
195    This is most important in the case of some networked file systems,
196    where data is not synced with the file server until close() or
197    fsync(), so data could remain in cache for days.
198    Note the caveats reported with gmx_fio_fsync().
199
200     returns: NULL if no error occurred, or a pointer to the first file that
201              failed if an error occurred
202  */
203
204
205 int gmx_fio_get_file_md5(t_fileio *fio, gmx_off_t offset,
206                          unsigned char digest[]);
207
208
209 int xtc_seek_frame(t_fileio *fio, int frame, int natoms);
210
211 int xtc_seek_time(t_fileio *fio, real time, int natoms, gmx_bool bSeekForwardOnly);
212
213
214 /* Add this to the comment string for debugging */
215 void gmx_fio_set_comment(t_fileio *fio, const char *comment);
216
217 /* Remove previously set comment */
218 void gmx_fio_unset_comment(t_fileio *fio);
219
220
221
222
223 /********************************************************
224  * Read and write
225  ********************************************************/
226
227
228 /* basic reading & writing */
229 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
230                             const char *desc, const char *srcfile, int line);
231 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
232                              const char *desc, const char *srcfile, int line);
233 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
234                               const char *desc, const char *srcfile, int line);
235 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
236                            const char *desc, const char *srcfile, int line);
237 gmx_bool gmx_fio_reade_int64(t_fileio *fio, gmx_int64_t *item,
238                              const char *desc, const char *srcfile, int line);
239 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
240                              const char *desc, const char *srcfile, int line);
241 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
242                               const char *desc, const char *srcfile, int line);
243 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
244                             const char *desc, const char *srcfile, int line);
245 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
246                             const char *desc, const char *srcfile, int line);
247 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
248                               const char *desc, const char *srcfile, int line);
249
250 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
251                              const char *desc, const char *srcfile, int line);
252 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
253                               const char *desc, const char *srcfile, int line);
254 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
255                                const char *desc, const char *srcfile, int line);
256 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
257                             const char *desc, const char *srcfile, int line);
258 gmx_bool gmx_fio_writee_int64(t_fileio *fio, gmx_int64_t item,
259                               const char *desc, const char *srcfile, int line);
260 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
261                               const char *desc, const char *srcfile, int line);
262 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
263                                const char *desc, const char *srcfile, int line);
264 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
265                              const char *desc, const char *srcfile, int line);
266 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
267                              const char *desc, const char *srcfile, int line);
268 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
269                                const char *desc, const char *srcfile, int line);
270
271 /* reading or writing, depending on the file's opening mode string */
272 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
273                           const char *desc, const char *srcfile, int line);
274 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
275                            const char *desc, const char *srcfile, int line);
276 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
277                             const char *desc, const char *srcfile, int line);
278 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
279                               const char *desc, const char *srcfile, int line);
280 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
281                          const char *desc, const char *srcfile, int line);
282 gmx_bool gmx_fio_doe_int64(t_fileio *fio, gmx_int64_t *item,
283                            const char *desc, const char *srcfile, int line);
284 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
285                            const char *desc, const char *srcfile, int line);
286 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
287                             const char *desc, const char *srcfile, int line);
288 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
289                           const char *desc, const char *srcfile, int line);
290 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
291                           const char *desc, const char *srcfile, int line);
292 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
293                             const char *desc, const char *srcfile, int line);
294
295
296
297
298 /* array reading & writing */
299 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
300                              const char *desc, const char *srcfile, int line);
301 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
302                               const char *desc, const char *srcfile, int line);
303 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
304                                const char *desc, const char *srcfile, int line);
305 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
306                             const char *desc, const char *srcfile, int line);
307 gmx_bool gmx_fio_nreade_int64(t_fileio *fio, gmx_int64_t *item, int n,
308                               const char *desc, const char *srcfile,
309                               int line);
310 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
311                               const char *desc, const char *srcfile, int line);
312 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
313                                const char *desc, const char *srcfile, int line);
314 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
315                              const char *desc, const char *srcfile, int line);
316 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
317                              const char *desc, const char *srcfile, int line);
318 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
319                                const char *desc, const char *srcfile, int line);
320
321 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
322                               const char *desc, const char *srcfile, int line);
323 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
324                                const char *desc, const char *srcfile, int line);
325 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
326                                 const char *desc, const char *srcfile, int line);
327 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
328                              const char *desc, const char *srcfile, int line);
329 gmx_bool gmx_fio_nwritee_int64(t_fileio *fio,
330                                const gmx_int64_t *item, int n,
331                                const char *desc, const char *srcfile,
332                                int line);
333 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
334                                const char *desc, const char *srcfile, int line);
335 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
336                                 const char *desc, const char *srcfile, int line);
337 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
338                               const char *desc, const char *srcfile, int line);
339 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
340                               const char *desc, const char *srcfile, int line);
341 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
342                                 const char *desc, const char *srcfile, int line);
343
344 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
345                            const char *desc, const char *srcfile, int line);
346 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
347                             const char *desc, const char *srcfile, int line);
348 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
349                              const char *desc, const char *srcfile, int line);
350 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
351                                const char *desc, const char *srcfile, int line);
352 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
353                           const char *desc, const char *srcfile, int line);
354 gmx_bool gmx_fio_ndoe_int64(t_fileio *fio, gmx_int64_t *item, int n,
355                             const char *desc, const char *srcfile,
356                             int line);
357 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
358                             const char *desc, const char *srcfile, int line);
359 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
360                              const char *desc, const char *srcfile, int line);
361 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
362                            const char *desc, const char *srcfile, int line);
363 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
364                            const char *desc, const char *srcfile, int line);
365 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
366                              const char *desc, const char *srcfile, int line);
367
368
369
370 /* convenience macros */
371 #define gmx_fio_read_real(fio, item)           gmx_fio_reade_real(fio, &item, (#item), __FILE__, __LINE__)
372 #define gmx_fio_read_float(fio, item)          gmx_fio_reade_float(fio, &item, (#item), __FILE__, __LINE__)
373 #define gmx_fio_read_double(fio, item)         gmx_fio_reade_double(fio, &item, (#item), __FILE__, __LINE__)
374 #define gmx_fio_read_int(fio, item)            gmx_fio_reade_int(fio, &item, (#item), __FILE__, __LINE__)
375 #define gmx_fio_read_int64(fio, item)          gmx_fio_reade_int64(fio, &item, (#item), __FILE__, __LINE__)
376 #define gmx_fio_read_uchar(fio, item)          gmx_fio_reade_uchar(fio, &item, (#item), __FILE__, __LINE__)
377 #define gmx_fio_read_ushort(fio, item)         gmx_fio_reade_ushort(fio, &item, (#item), __FILE__, __LINE__)
378 #define gmx_fio_read_rvec(fio, item)           gmx_fio_reade_rvec(fio, item, (#item), __FILE__, __LINE__)
379 #define gmx_fio_read_ivec(fio, item)           gmx_fio_reade_ivec(fio, item, (#item), __FILE__, __LINE__)
380 #define gmx_fio_read_string(fio, item)         gmx_fio_reade_string(fio, item, (#item), __FILE__, __LINE__)
381
382 #define gmx_fio_write_real(fio, item)           gmx_fio_writee_real(fio, item, (#item), __FILE__, __LINE__)
383 #define gmx_fio_write_float(fio, item)          gmx_fio_writee_float(fio, item, (#item), __FILE__, __LINE__)
384 #define gmx_fio_write_double(fio, item)         gmx_fio_writee_double(fio, item, (#item), __FILE__, __LINE__)
385 #define gmx_fio_write_int(fio, item)            gmx_fio_writee_int(fio, item, (#item), __FILE__, __LINE__)
386 #define gmx_fio_write_int64(fio, item)          gmx_fio_writee_int64(fio, item, (#item), __FILE__, __LINE__)
387 #define gmx_fio_write_uchar(fio, item)          gmx_fio_writee_uchar(fio, item, (#item), __FILE__, __LINE__)
388 #define gmx_fio_write_ushort(fio, item)         gmx_fio_writee_ushort(fio, item, (#item), __FILE__, __LINE__)
389 #define gmx_fio_write_rvec(fio, item)           gmx_fio_writee_rvec(fio, item, (#item), __FILE__, __LINE__)
390 #define gmx_fio_write_ivec(fio, item)           gmx_fio_writee_ivec(fio, item, (#item), __FILE__, __LINE__)
391 #define gmx_fio_write_string(fio, item)         gmx_fio_writee_string(fio, item, (#item), __FILE__, __LINE__)
392
393 #define gmx_fio_do_real(fio, item)              gmx_fio_doe_real(fio, &item, (#item), __FILE__, __LINE__)
394 #define gmx_fio_do_float(fio, item)             gmx_fio_doe_float(fio, &item, (#item), __FILE__, __LINE__)
395 #define gmx_fio_do_double(fio, item)            gmx_fio_doe_double(fio, &item, (#item), __FILE__, __LINE__)
396 #define gmx_fio_do_gmx_bool(fio, item)          gmx_fio_doe_gmx_bool(fio, &item, (#item), __FILE__, __LINE__)
397 #define gmx_fio_do_int(fio, item)               gmx_fio_doe_int(fio, &item, (#item), __FILE__, __LINE__)
398 #define gmx_fio_do_int64(fio, item)             gmx_fio_doe_int64(fio, &item, (#item), __FILE__, __LINE__)
399 #define gmx_fio_do_uchar(fio, item)             gmx_fio_doe_uchar(fio, &item, (#item), __FILE__, __LINE__)
400 #define gmx_fio_do_ushort(fio, item)            gmx_fio_doe_ushort(fio, &item, (#item), __FILE__, __LINE__)
401 #define gmx_fio_do_rvec(fio, item)              gmx_fio_doe_rvec(fio, &item, (#item), __FILE__, __LINE__)
402 #define gmx_fio_do_ivec(fio, item)              gmx_fio_doe_ivec(fio, &item, (#item), __FILE__, __LINE__)
403 #define gmx_fio_do_string(fio, item)            gmx_fio_doe_string(fio, item, (#item), __FILE__, __LINE__)
404
405
406
407
408 #define gmx_fio_nread_real(fio, item, n)            gmx_fio_nreade_real(fio, item, n, (#item), __FILE__, __LINE__)
409 #define gmx_fio_nread_float(fio, item, n)           gmx_fio_nreade_float(fio, item, n, (#item), __FILE__, __LINE__)
410 #define gmx_fio_nread_double(fio, item, n)          gmx_fio_nreade_double(fio, item, n, (#item), __FILE__, __LINE__)
411 #define gmx_fio_nread_int(fio, item, n)             gmx_fio_nreade_int(fio, item, n, (#item), __FILE__, __LINE__)
412 #define gmx_fio_nread_int64(fio, item, n)           gmx_fio_nreade_int64(fio, item, n, (#item), __FILE__, __LINE__)
413 #define gmx_fio_nread_uchar(fio, item, n)           gmx_fio_nreade_uchar(fio, item, n, (#item), __FILE__, __LINE__)
414 #define gmx_fio_nread_ushort(fio, item, n)          gmx_fio_nreade_ushort(fio, item, n, (#item), __FILE__, __LINE__)
415 #define gmx_fio_nread_rvec(fio, item, n)            gmx_fio_nreade_rvec(fio, item, n, (#item), __FILE__, __LINE__)
416 #define gmx_fio_nread_ivec(fio, item, n)            gmx_fio_nreade_ivec(fio, item, n, (#item), __FILE__, __LINE__)
417 #define gmx_fio_nread_string(fio, item, n)          gmx_fio_nreade_string(fio, item, n, (#item), __FILE__, __LINE__)
418
419 #define gmx_fio_nwrite_real(fio, item, n)           gmx_fio_nwritee_real(fio, item, n, (#item), __FILE__, __LINE__)
420 #define gmx_fio_nwrite_float(fio, item, n)          gmx_fio_nwritee_float(fio, item, n, (#item), __FILE__, __LINE__)
421 #define gmx_fio_nwrite_double(fio, item, n)         gmx_fio_nwritee_double(fio, item, n, (#item), __FILE__, __LINE__)
422 #define gmx_fio_nwrite_int(fio, item, n)            gmx_fio_nwritee_int(fio, item, n, (#item), __FILE__, __LINE__)
423 #define gmx_fio_nwrite_int64(fio, item, n)          gmx_fio_nwritee_int64(fio, item, n, (#item), __FILE__, __LINE__)
424 #define gmx_fio_nwrite_uchar(fio, item, n)          gmx_fio_nwritee_uchar(fio, item, n, (#item), __FILE__, __LINE__)
425 #define gmx_fio_nwrite_ushort(fio, item, n)         gmx_fio_nwritee_ushort(fio, item, n, (#item), __FILE__, __LINE__)
426 #define gmx_fio_nwrite_rvec(fio, item, n)           gmx_fio_nwritee_rvec(fio, item, n, (#item), __FILE__, __LINE__)
427 #define gmx_fio_nwrite_ivec(fio, item, n)           gmx_fio_nwritee_ivec(fio, item, n, (#item), __FILE__, __LINE__)
428 #define gmx_fio_nwrite_string(fio, item, n)         gmx_fio_nwritee_string(fio, item, n, (#item), __FILE__, __LINE__)
429
430 #define gmx_fio_ndo_real(fio, item, n)              gmx_fio_ndoe_real(fio, item, n, (#item), __FILE__, __LINE__)
431 #define gmx_fio_ndo_float(fio, item, n)             gmx_fio_ndoe_float(fio, item, n, (#item), __FILE__, __LINE__)
432 #define gmx_fio_ndo_double(fio, item, n)            gmx_fio_ndoe_double(fio, item, n, (#item), __FILE__, __LINE__)
433 #define gmx_fio_ndo_gmx_bool(fio, item, n)          gmx_fio_ndoe_gmx_bool(fio, item, n, (#item), __FILE__, __LINE__)
434 #define gmx_fio_ndo_int(fio, item, n)               gmx_fio_ndoe_int(fio, item, n, (#item), __FILE__, __LINE__)
435 #define gmx_fio_ndo_int64(fio, item, n)             gmx_fio_ndoe_int64(fio, item, n, (#item), __FILE__, __LINE__)
436 #define gmx_fio_ndo_uchar(fio, item, n)             gmx_fio_ndoe_uchar(fio, item, n, (#item), __FILE__, __LINE__)
437 #define gmx_fio_ndo_ushort(fio, item, n)            gmx_fio_ndoe_ushort(fio, item, n, (#item), __FILE__, __LINE__)
438 #define gmx_fio_ndo_rvec(fio, item, n)              gmx_fio_ndoe_rvec(fio, item, n, (#item), __FILE__, __LINE__)
439 #define gmx_fio_ndo_ivec(fio, item, n)              gmx_fio_ndoe_ivec(fio, item, n, (#item), __FILE__, __LINE__)
440 #define gmx_fio_ndo_string(fio, item, n)            gmx_fio_ndoe_string(fio, item, n, (#item), __FILE__, __LINE__)
441
442 #ifdef __cplusplus
443 }
444 #endif
445
446 #endif