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, 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.
48 #include "gmx_fatal.h"
57 #include "gmxfio_int.h"
60 /*******************************************************************
62 * READ/WRITE FUNCTIONS
64 *******************************************************************/
66 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
67 const char *desc, const char *srcfile, int line)
71 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
76 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
77 const char *desc, const char *srcfile, int line)
81 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
87 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
88 const char *desc, const char *srcfile, int line)
92 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
97 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
98 const char *desc, const char *srcfile, int line)
102 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
107 gmx_bool gmx_fio_reade_gmx_large_int(t_fileio *fio, gmx_int64_t *item,
108 const char *desc, const char *srcfile, int line)
112 ret = fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
117 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
118 const char *desc, const char *srcfile, int line)
122 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
128 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
129 const char *desc, const char *srcfile, int line)
133 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
138 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
139 const char *desc, const char *srcfile, int line)
143 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
148 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
149 const char *desc, const char *srcfile, int line)
153 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
158 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
159 const char *desc, const char *srcfile, int line)
163 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
171 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
172 const char *desc, const char *srcfile, int line)
176 ret = fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
181 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
182 const char *desc, const char *srcfile, int line)
186 ret = fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
191 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
192 const char *desc, const char *srcfile, int line)
196 ret = fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
202 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
203 const char *desc, const char *srcfile, int line)
207 ret = fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
212 gmx_bool gmx_fio_writee_gmx_large_int(t_fileio *fio, gmx_int64_t item,
213 const char *desc, const char *srcfile, int line)
217 ret = fio->iotp->nwrite(fio, &item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
222 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
223 const char *desc, const char *srcfile, int line)
227 ret = fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
232 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
233 const char *desc, const char *srcfile, int line)
237 ret = fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
242 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
243 const char *desc, const char *srcfile, int line)
247 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
252 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
253 const char *desc, const char *srcfile, int line)
257 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
262 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
263 const char *desc, const char *srcfile, int line)
267 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
274 /* Read/write functions */
276 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
277 const char *desc, const char *srcfile, int line)
283 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
287 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
294 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
295 const char *desc, const char *srcfile, int line)
301 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
305 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
311 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
312 const char *desc, const char *srcfile, int line)
318 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
322 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
329 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
330 const char *desc, const char *srcfile, int line)
338 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
344 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
350 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
351 const char *desc, const char *srcfile, int line)
357 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
361 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
367 gmx_bool gmx_fio_doe_gmx_large_int(t_fileio *fio, gmx_int64_t *item,
368 const char *desc, const char *srcfile, int line)
374 ret = fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
378 ret = fio->iotp->nwrite(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
384 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
385 const char *desc, const char *srcfile, int line)
391 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
395 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
401 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
402 const char *desc, const char *srcfile, int line)
408 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
412 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
418 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
419 const char *desc, const char *srcfile, int line)
425 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
429 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
435 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
436 const char *desc, const char *srcfile, int line)
442 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
446 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
452 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
453 const char *desc, const char *srcfile, int line)
459 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
463 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
475 /* Array reading & writing */
477 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
478 const char *desc, const char *srcfile, int line)
483 for (i = 0; i < n; i++)
485 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
491 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
492 const char *desc, const char *srcfile, int line)
497 for (i = 0; i < n; i++)
499 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
507 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
508 const char *desc, const char *srcfile, int line)
513 for (i = 0; i < n; i++)
515 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
522 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
523 const char *desc, const char *srcfile, int line)
528 for (i = 0; i < n; i++)
530 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
536 gmx_bool gmx_fio_nreade_gmx_large_int(t_fileio *fio, gmx_int64_t *item, int n,
537 const char *desc, const char *srcfile, int line)
542 for (i = 0; i < n; i++)
544 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
552 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
553 const char *desc, const char *srcfile, int line)
557 ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
562 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
563 const char *desc, const char *srcfile, int line)
568 for (i = 0; i < n; i++)
570 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
577 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
578 const char *desc, const char *srcfile, int line)
582 ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
587 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
588 const char *desc, const char *srcfile, int line)
593 for (i = 0; i < n; i++)
595 ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
601 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
602 const char *desc, const char *srcfile, int line)
607 for (i = 0; i < n; i++)
609 ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
620 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
621 const char *desc, const char *srcfile, int line)
626 for (i = 0; i < n; i++)
628 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
635 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
636 const char *desc, const char *srcfile, int line)
641 for (i = 0; i < n; i++)
643 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
650 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
651 const char *desc, const char *srcfile, int line)
656 for (i = 0; i < n; i++)
658 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
665 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
666 const char *desc, const char *srcfile, int line)
671 for (i = 0; i < n; i++)
673 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
680 gmx_bool gmx_fio_nwritee_gmx_large_int(t_fileio *fio,
681 const gmx_int64_t *item, int n,
682 const char *desc, const char *srcfile, int line)
687 for (i = 0; i < n; i++)
689 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT,
690 desc, srcfile, line);
696 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
697 const char *desc, const char *srcfile, int line)
701 ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
706 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
707 const char *desc, const char *srcfile, int line)
712 for (i = 0; i < n; i++)
714 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
722 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
723 const char *desc, const char *srcfile, int line)
727 ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
732 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
733 const char *desc, const char *srcfile, int line)
738 for (i = 0; i < n; i++)
740 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
748 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
749 const char *desc, const char *srcfile, int line)
754 for (i = 0; i < n; i++)
756 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
765 /* array read/write functions */
767 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
768 const char *desc, const char *srcfile, int line)
773 for (i = 0; i < n; i++)
777 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
782 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
792 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
793 const char *desc, const char *srcfile, int line)
798 for (i = 0; i < n; i++)
802 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
807 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
817 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
818 const char *desc, const char *srcfile, int line)
823 for (i = 0; i < n; i++)
827 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
832 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
842 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
843 const char *desc, const char *srcfile, int line)
849 for (i = 0; i < n; i++)
853 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
860 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
868 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
869 const char *desc, const char *srcfile, int line)
874 for (i = 0; i < n; i++)
878 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
883 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
893 gmx_bool gmx_fio_ndoe_gmx_large_int(t_fileio *fio, gmx_int64_t *item, int n,
894 const char *desc, const char *srcfile, int line)
899 for (i = 0; i < n; i++)
903 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
908 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
918 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
919 const char *desc, const char *srcfile, int line)
925 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
930 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
939 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
940 const char *desc, const char *srcfile, int line)
945 for (i = 0; i < n; i++)
949 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
954 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
964 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
965 const char *desc, const char *srcfile, int line)
971 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
975 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
984 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
985 const char *desc, const char *srcfile, int line)
990 for (i = 0; i < n; i++)
994 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
999 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
1003 gmx_fio_unlock(fio);
1009 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
1010 const char *desc, const char *srcfile, int line)
1012 gmx_bool ret = TRUE;
1015 for (i = 0; i < n; i++)
1019 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
1024 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
1028 gmx_fio_unlock(fio);