2 * This file is part of the GROMACS molecular simulation package.
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.
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.
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.
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.
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.
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.
47 #include "gmx_fatal.h"
55 #include "gmxfio_int.h"
58 /*******************************************************************
60 * READ/WRITE FUNCTIONS
62 *******************************************************************/
64 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
65 const char *desc, const char *srcfile, int line)
69 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
74 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
75 const char *desc, const char *srcfile, int line)
79 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
85 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
86 const char *desc, const char *srcfile, int line)
90 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
95 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
96 const char *desc, const char *srcfile, int line)
100 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
105 gmx_bool gmx_fio_reade_int64(t_fileio *fio, gmx_int64_t *item,
106 const char *desc, const char *srcfile, int line)
110 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
115 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
116 const char *desc, const char *srcfile, int line)
120 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
126 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
127 const char *desc, const char *srcfile, int line)
131 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
136 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
137 const char *desc, const char *srcfile, int line)
141 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
146 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
147 const char *desc, const char *srcfile, int line)
151 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
156 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
157 const char *desc, const char *srcfile, int line)
161 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
169 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
170 const char *desc, const char *srcfile, int line)
174 ret = fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
179 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
180 const char *desc, const char *srcfile, int line)
184 ret = fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
189 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
190 const char *desc, const char *srcfile, int line)
194 ret = fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
200 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
201 const char *desc, const char *srcfile, int line)
205 ret = fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
210 gmx_bool gmx_fio_writee_int64(t_fileio *fio, gmx_int64_t item,
211 const char *desc, const char *srcfile, int line)
215 ret = fio->iotp->nwrite(fio, &item, 1, eioINT64, desc, srcfile, line);
220 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
221 const char *desc, const char *srcfile, int line)
225 ret = fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
230 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
231 const char *desc, const char *srcfile, int line)
235 ret = fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
240 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
241 const char *desc, const char *srcfile, int line)
245 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
250 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
251 const char *desc, const char *srcfile, int line)
255 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
260 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
261 const char *desc, const char *srcfile, int line)
265 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
272 /* Read/write functions */
274 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
275 const char *desc, const char *srcfile, int line)
281 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
285 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
292 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
293 const char *desc, const char *srcfile, int line)
299 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
303 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
309 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
310 const char *desc, const char *srcfile, int line)
316 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
320 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
327 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
328 const char *desc, const char *srcfile, int line)
336 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
342 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
348 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
349 const char *desc, const char *srcfile, int line)
355 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
359 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
365 gmx_bool gmx_fio_doe_int64(t_fileio *fio, gmx_int64_t *item,
366 const char *desc, const char *srcfile, int line)
372 ret = fio->iotp->nread(fio, item, 1, eioINT64, desc, srcfile, line);
376 ret = fio->iotp->nwrite(fio, item, 1, eioINT64, desc, srcfile, line);
382 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
383 const char *desc, const char *srcfile, int line)
389 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
393 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
399 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
400 const char *desc, const char *srcfile, int line)
406 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
410 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
416 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
417 const char *desc, const char *srcfile, int line)
423 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
427 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
433 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
434 const char *desc, const char *srcfile, int line)
440 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
444 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
450 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
451 const char *desc, const char *srcfile, int line)
457 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
461 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
473 /* Array reading & writing */
475 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
476 const char *desc, const char *srcfile, int line)
481 for (i = 0; i < n; i++)
483 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
489 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
490 const char *desc, const char *srcfile, int line)
495 for (i = 0; i < n; i++)
497 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
505 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
506 const char *desc, const char *srcfile, int line)
511 for (i = 0; i < n; i++)
513 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
520 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
521 const char *desc, const char *srcfile, int line)
526 for (i = 0; i < n; i++)
528 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
534 gmx_bool gmx_fio_nreade_int64(t_fileio *fio, gmx_int64_t *item, int n,
535 const char *desc, const char *srcfile, int line)
540 for (i = 0; i < n; i++)
542 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
550 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
551 const char *desc, const char *srcfile, int line)
555 ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
560 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
561 const char *desc, const char *srcfile, int line)
566 for (i = 0; i < n; i++)
568 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
575 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
576 const char *desc, const char *srcfile, int line)
580 ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
585 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
586 const char *desc, const char *srcfile, int line)
591 for (i = 0; i < n; i++)
593 ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
599 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
600 const char *desc, const char *srcfile, int line)
605 for (i = 0; i < n; i++)
607 ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
618 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
619 const char *desc, const char *srcfile, int line)
624 for (i = 0; i < n; i++)
626 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
633 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
634 const char *desc, const char *srcfile, int line)
639 for (i = 0; i < n; i++)
641 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
648 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
649 const char *desc, const char *srcfile, int line)
654 for (i = 0; i < n; i++)
656 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
663 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
664 const char *desc, const char *srcfile, int line)
669 for (i = 0; i < n; i++)
671 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
678 gmx_bool gmx_fio_nwritee_int64(t_fileio *fio,
679 const gmx_int64_t *item, int n,
680 const char *desc, const char *srcfile, int line)
685 for (i = 0; i < n; i++)
687 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64,
688 desc, srcfile, line);
694 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
695 const char *desc, const char *srcfile, int line)
699 ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
704 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
705 const char *desc, const char *srcfile, int line)
710 for (i = 0; i < n; i++)
712 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
720 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
721 const char *desc, const char *srcfile, int line)
725 ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
730 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
731 const char *desc, const char *srcfile, int line)
736 for (i = 0; i < n; i++)
738 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
746 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
747 const char *desc, const char *srcfile, int line)
752 for (i = 0; i < n; i++)
754 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
763 /* array read/write functions */
765 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
766 const char *desc, const char *srcfile, int line)
771 for (i = 0; i < n; i++)
775 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
780 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
790 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
791 const char *desc, const char *srcfile, int line)
796 for (i = 0; i < n; i++)
800 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
805 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
815 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
816 const char *desc, const char *srcfile, int line)
821 for (i = 0; i < n; i++)
825 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
830 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
840 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
841 const char *desc, const char *srcfile, int line)
847 for (i = 0; i < n; i++)
851 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
858 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
866 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
867 const char *desc, const char *srcfile, int line)
872 for (i = 0; i < n; i++)
876 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
881 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
891 gmx_bool gmx_fio_ndoe_int64(t_fileio *fio, gmx_int64_t *item, int n,
892 const char *desc, const char *srcfile, int line)
897 for (i = 0; i < n; i++)
901 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT64, desc,
906 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT64, desc,
916 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
917 const char *desc, const char *srcfile, int line)
923 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
928 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
937 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
938 const char *desc, const char *srcfile, int line)
943 for (i = 0; i < n; i++)
947 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
952 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
962 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
963 const char *desc, const char *srcfile, int line)
969 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
973 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
982 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
983 const char *desc, const char *srcfile, int line)
988 for (i = 0; i < n; i++)
992 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
997 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
1001 gmx_fio_unlock(fio);
1007 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
1008 const char *desc, const char *srcfile, int line)
1010 gmx_bool ret = TRUE;
1013 for (i = 0; i < n; i++)
1017 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
1022 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
1026 gmx_fio_unlock(fio);