Revised wording in pdb2gmx.c, hopefully clearer now.
[gromacs/rigid-bodies.git] / src / gmxlib / gmxfio_rw.c
blobd40ebf5a7103c1db7d6c0a3dd876f00759caa39b
1 /* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustrup"; -*-
3 *
4 * This source code is part of
5 *
6 * G R O M A C S
7 *
8 * GROningen MAchine for Chemical Simulations
9 *
10 * VERSION 3.2.0
11 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
12 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
13 * Copyright (c) 2001-2004, The GROMACS development team,
14 * check out http://www.gromacs.org for more information.
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version 2
19 * of the License, or (at your option) any later version.
21 * If you want to redistribute modifications, please consider that
22 * scientific software is very special. Version control is crucial -
23 * bugs must be traceable. We will be happy to consider code for
24 * inclusion in the official distribution, but derived work must not
25 * be called official GROMACS. Details are found in the README & COPYING
26 * files - if they are missing, get the official version at www.gromacs.org.
28 * To help us fund GROMACS development, we humbly ask that you cite
29 * the papers on the package - you can find them in the top README file.
31 * For more info, check our website at http://www.gromacs.org
33 * And Hey:
34 * GROningen Mixture of Alchemy and Childrens' Stories
36 #ifdef HAVE_CONFIG_H
37 #include <config.h>
38 #endif
40 #include <ctype.h>
41 #include <stdio.h>
42 #include <errno.h>
43 #ifdef HAVE_IO_H
44 #include <io.h>
45 #endif
47 #include "gmx_fatal.h"
48 #include "macros.h"
49 #include "smalloc.h"
50 #include "futil.h"
51 #include "filenm.h"
52 #include "string2.h"
53 #include "gmxfio.h"
54 #include "md5.h"
56 #ifdef GMX_THREADS
57 #include "thread_mpi.h"
58 #endif
60 #include "gmxfio_int.h"
63 /*******************************************************************
65 * READ/WRITE FUNCTIONS
67 *******************************************************************/
69 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
70 const char *desc, const char *srcfile, int line)
72 gmx_bool ret;
73 gmx_fio_lock(fio);
74 ret=fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
75 gmx_fio_unlock(fio);
76 return ret;
79 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
80 const char *desc, const char *srcfile, int line)
82 gmx_bool ret;
83 gmx_fio_lock(fio);
84 ret=fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
85 gmx_fio_unlock(fio);
86 return ret;
90 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
91 const char *desc, const char *srcfile, int line)
93 gmx_bool ret;
94 gmx_fio_lock(fio);
95 ret=fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
96 gmx_fio_unlock(fio);
97 return ret;
100 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
101 const char *desc, const char *srcfile, int line)
103 gmx_bool ret;
104 gmx_fio_lock(fio);
105 ret=fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
106 gmx_fio_unlock(fio);
107 return ret;
110 gmx_bool gmx_fio_reade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
111 const char *desc, const char *srcfile, int line)
113 gmx_bool ret;
114 gmx_fio_lock(fio);
115 ret=fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
116 gmx_fio_unlock(fio);
117 return ret;
120 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
121 const char *desc, const char *srcfile, int line)
123 gmx_bool ret;
124 gmx_fio_lock(fio);
125 ret=fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
126 gmx_fio_unlock(fio);
127 return ret;
131 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
132 const char *desc, const char *srcfile, int line)
134 gmx_bool ret;
135 gmx_fio_lock(fio);
136 ret=fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
137 gmx_fio_unlock(fio);
138 return ret;
141 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
142 const char *desc, const char *srcfile, int line)
144 gmx_bool ret;
145 gmx_fio_lock(fio);
146 ret=fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
147 gmx_fio_unlock(fio);
148 return ret;
151 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
152 const char *desc, const char *srcfile, int line)
154 gmx_bool ret;
155 gmx_fio_lock(fio);
156 ret=fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
157 gmx_fio_unlock(fio);
158 return ret;
161 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
162 const char *desc, const char *srcfile, int line)
164 gmx_bool ret;
165 gmx_fio_lock(fio);
166 ret=fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
167 gmx_fio_unlock(fio);
168 return ret;
172 /* Write */
174 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
175 const char *desc, const char *srcfile, int line)
177 gmx_bool ret;
178 gmx_fio_lock(fio);
179 ret=fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
180 gmx_fio_unlock(fio);
181 return ret;
184 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
185 const char *desc, const char *srcfile, int line)
187 gmx_bool ret;
188 gmx_fio_lock(fio);
189 ret=fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
190 gmx_fio_unlock(fio);
191 return ret;
194 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
195 const char *desc, const char *srcfile, int line)
197 gmx_bool ret;
198 gmx_fio_lock(fio);
199 ret=fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
200 gmx_fio_unlock(fio);
201 return ret;
205 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
206 const char *desc, const char *srcfile, int line)
208 gmx_bool ret;
209 gmx_fio_lock(fio);
210 ret=fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
211 gmx_fio_unlock(fio);
212 return ret;
215 gmx_bool gmx_fio_writee_gmx_large_int(t_fileio *fio, gmx_large_int_t item,
216 const char *desc, const char *srcfile, int line)
218 gmx_bool ret;
219 gmx_fio_lock(fio);
220 ret=fio->iotp->nwrite(fio, &item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
221 gmx_fio_unlock(fio);
222 return ret;
225 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
226 const char *desc, const char *srcfile, int line)
228 gmx_bool ret;
229 gmx_fio_lock(fio);
230 ret=fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
231 gmx_fio_unlock(fio);
232 return ret;
235 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
236 const char *desc, const char *srcfile, int line)
238 gmx_bool ret;
239 gmx_fio_lock(fio);
240 ret=fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
241 gmx_fio_unlock(fio);
242 return ret;
245 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
246 const char *desc, const char *srcfile, int line)
248 gmx_bool ret;
249 gmx_fio_lock(fio);
250 ret=fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
251 gmx_fio_unlock(fio);
252 return ret;
255 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
256 const char *desc, const char *srcfile, int line)
258 gmx_bool ret;
259 gmx_fio_lock(fio);
260 ret=fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
261 gmx_fio_unlock(fio);
262 return ret;
265 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
266 const char *desc, const char *srcfile, int line)
268 gmx_bool ret;
269 gmx_fio_lock(fio);
270 ret=fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
271 gmx_fio_unlock(fio);
272 return ret;
277 /* Read/write functions */
279 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
280 const char *desc, const char *srcfile, int line)
282 gmx_bool ret;
283 gmx_fio_lock(fio);
284 if (fio->bRead)
285 ret=fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
286 else
287 ret=fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
288 gmx_fio_unlock(fio);
289 return ret;
293 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
294 const char *desc, const char *srcfile, int line)
296 gmx_bool ret;
297 gmx_fio_lock(fio);
298 if (fio->bRead)
299 ret=fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
300 else
301 ret=fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
302 gmx_fio_unlock(fio);
303 return ret;
306 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
307 const char *desc, const char *srcfile, int line)
309 gmx_bool ret;
310 gmx_fio_lock(fio);
311 if (fio->bRead)
312 ret=fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
313 else
314 ret=fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
315 gmx_fio_unlock(fio);
316 return ret;
320 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
321 const char *desc, const char *srcfile, int line)
323 gmx_bool ret;
324 int itmp;
326 gmx_fio_lock(fio);
327 if (fio->bRead)
329 ret=fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
330 *item = itmp;
332 else
334 itmp = *item;
335 ret=fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
337 gmx_fio_unlock(fio);
338 return ret;
341 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
342 const char *desc, const char *srcfile, int line)
344 gmx_bool ret;
345 gmx_fio_lock(fio);
346 if (fio->bRead)
347 ret=fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
348 else
349 ret=fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
350 gmx_fio_unlock(fio);
351 return ret;
354 gmx_bool gmx_fio_doe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
355 const char *desc, const char *srcfile, int line)
357 gmx_bool ret;
358 gmx_fio_lock(fio);
359 if (fio->bRead)
360 ret=fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
361 else
362 ret=fio->iotp->nwrite(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
363 gmx_fio_unlock(fio);
364 return ret;
367 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
368 const char *desc, const char *srcfile, int line)
370 gmx_bool ret;
371 gmx_fio_lock(fio);
372 if (fio->bRead)
373 ret=fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
374 else
375 ret=fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
376 gmx_fio_unlock(fio);
377 return ret;
380 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
381 const char *desc, const char *srcfile, int line)
383 gmx_bool ret;
384 gmx_fio_lock(fio);
385 if (fio->bRead)
386 ret=fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
387 else
388 ret=fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
389 gmx_fio_unlock(fio);
390 return ret;
393 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
394 const char *desc, const char *srcfile, int line)
396 gmx_bool ret;
397 gmx_fio_lock(fio);
398 if (fio->bRead)
399 ret=fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
400 else
401 ret=fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
402 gmx_fio_unlock(fio);
403 return ret;
406 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
407 const char *desc, const char *srcfile, int line)
409 gmx_bool ret;
410 gmx_fio_lock(fio);
411 if (fio->bRead)
412 ret=fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
413 else
414 ret=fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
415 gmx_fio_unlock(fio);
416 return ret;
419 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
420 const char *desc, const char *srcfile, int line)
422 gmx_bool ret;
423 gmx_fio_lock(fio);
424 if (fio->bRead)
425 ret=fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
426 else
427 ret=fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
428 gmx_fio_unlock(fio);
429 return ret;
438 /* Array reading & writing */
440 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
441 const char *desc, const char *srcfile, int line)
443 gmx_bool ret=TRUE;
444 int i;
445 gmx_fio_lock(fio);
446 for(i=0;i<n;i++)
447 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
448 gmx_fio_unlock(fio);
449 return ret;
452 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
453 const char *desc, const char *srcfile, int line)
455 gmx_bool ret=TRUE;
456 int i;
457 gmx_fio_lock(fio);
458 for(i=0;i<n;i++)
459 ret= ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
460 srcfile, line);
461 gmx_fio_unlock(fio);
462 return ret;
466 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
467 const char *desc, const char *srcfile, int line)
469 gmx_bool ret=TRUE;
470 int i;
471 gmx_fio_lock(fio);
472 for(i=0;i<n;i++)
473 ret= ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
474 srcfile, line);
475 gmx_fio_unlock(fio);
476 return ret;
479 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
480 const char *desc, const char *srcfile, int line)
482 gmx_bool ret=TRUE;
483 int i;
484 gmx_fio_lock(fio);
485 for(i=0;i<n;i++)
486 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
487 gmx_fio_unlock(fio);
488 return ret;
491 gmx_bool gmx_fio_nreade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
492 const char *desc, const char *srcfile, int line)
494 gmx_bool ret=TRUE;
495 int i;
496 gmx_fio_lock(fio);
497 for(i=0;i<n;i++)
498 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
499 srcfile, line);
500 gmx_fio_unlock(fio);
501 return ret;
505 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
506 const char *desc, const char *srcfile, int line)
508 gmx_bool ret;
509 gmx_fio_lock(fio);
510 ret=fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
511 gmx_fio_unlock(fio);
512 return ret;
515 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
516 const char *desc, const char *srcfile, int line)
518 gmx_bool ret=TRUE;
519 int i;
520 gmx_fio_lock(fio);
521 for(i=0;i<n;i++)
522 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
523 srcfile, line);
524 gmx_fio_unlock(fio);
525 return ret;
528 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
529 const char *desc, const char *srcfile, int line)
531 gmx_bool ret;
532 gmx_fio_lock(fio);
533 ret=fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
534 gmx_fio_unlock(fio);
535 return ret;
538 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
539 const char *desc, const char *srcfile, int line)
541 gmx_bool ret=TRUE;
542 int i;
543 gmx_fio_lock(fio);
544 for(i=0;i<n;i++)
545 ret=ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
546 gmx_fio_unlock(fio);
547 return ret;
550 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
551 const char *desc, const char *srcfile, int line)
553 gmx_bool ret=TRUE;
554 int i;
555 gmx_fio_lock(fio);
556 for(i=0;i<n;i++)
557 ret=ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
558 gmx_fio_unlock(fio);
559 return ret;
565 /* Array writing */
567 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
568 const char *desc, const char *srcfile, int line)
570 gmx_bool ret=TRUE;
571 int i;
572 gmx_fio_lock(fio);
573 for(i=0;i<n;i++)
574 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
575 srcfile, line);
576 gmx_fio_unlock(fio);
577 return ret;
580 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
581 const char *desc, const char *srcfile, int line)
583 gmx_bool ret=TRUE;
584 int i;
585 gmx_fio_lock(fio);
586 for(i=0;i<n;i++)
587 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
588 srcfile, line);
589 gmx_fio_unlock(fio);
590 return ret;
593 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
594 const char *desc, const char *srcfile, int line)
596 gmx_bool ret=TRUE;
597 int i;
598 gmx_fio_lock(fio);
599 for(i=0;i<n;i++)
600 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
601 srcfile, line);
602 gmx_fio_unlock(fio);
603 return ret;
606 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
607 const char *desc, const char *srcfile, int line)
609 gmx_bool ret=TRUE;
610 int i;
611 gmx_fio_lock(fio);
612 for(i=0;i<n;i++)
613 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
614 line);
615 gmx_fio_unlock(fio);
616 return ret;
619 gmx_bool gmx_fio_nwritee_gmx_large_int(t_fileio *fio,
620 const gmx_large_int_t *item, int n,
621 const char *desc, const char *srcfile, int line)
623 gmx_bool ret=TRUE;
624 int i;
625 gmx_fio_lock(fio);
626 for(i=0;i<n;i++)
627 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT,
628 desc, srcfile, line);
629 gmx_fio_unlock(fio);
630 return ret;
633 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
634 const char *desc, const char *srcfile, int line)
636 gmx_bool ret;
637 gmx_fio_lock(fio);
638 ret=fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
639 gmx_fio_unlock(fio);
640 return ret;
643 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
644 const char *desc, const char *srcfile, int line)
646 gmx_bool ret=TRUE;
647 int i;
648 gmx_fio_lock(fio);
649 for(i=0;i<n;i++)
650 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
651 srcfile, line);
652 gmx_fio_unlock(fio);
653 return ret;
657 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
658 const char *desc, const char *srcfile, int line)
660 gmx_bool ret;
661 gmx_fio_lock(fio);
662 ret=fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
663 gmx_fio_unlock(fio);
664 return ret;
667 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
668 const char *desc, const char *srcfile, int line)
670 gmx_bool ret=TRUE;
671 int i;
672 gmx_fio_lock(fio);
673 for(i=0;i<n;i++)
674 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
675 srcfile, line);
676 gmx_fio_unlock(fio);
677 return ret;
681 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
682 const char *desc, const char *srcfile, int line)
684 gmx_bool ret=TRUE;
685 int i;
686 gmx_fio_lock(fio);
687 for(i=0;i<n;i++)
688 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
689 line);
690 gmx_fio_unlock(fio);
691 return ret;
696 /* array read/write functions */
698 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
699 const char *desc, const char *srcfile, int line)
701 gmx_bool ret=TRUE;
702 int i;
703 gmx_fio_lock(fio);
704 for(i=0;i<n;i++)
706 if (fio->bRead)
708 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
709 srcfile, line);
711 else
713 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
714 srcfile, line);
717 gmx_fio_unlock(fio);
718 return ret;
723 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
724 const char *desc, const char *srcfile, int line)
726 gmx_bool ret=TRUE;
727 int i;
728 gmx_fio_lock(fio);
729 for(i=0;i<n;i++)
731 if (fio->bRead)
733 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
734 srcfile, line);
736 else
738 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
739 srcfile, line);
742 gmx_fio_unlock(fio);
743 return ret;
748 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
749 const char *desc, const char *srcfile, int line)
751 gmx_bool ret=TRUE;
752 int i;
753 gmx_fio_lock(fio);
754 for(i=0;i<n;i++)
756 if (fio->bRead)
758 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
759 srcfile, line);
761 else
763 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
764 srcfile, line);
767 gmx_fio_unlock(fio);
768 return ret;
773 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
774 const char *desc, const char *srcfile, int line)
776 gmx_bool ret=TRUE;
777 int i,itmp;
779 gmx_fio_lock(fio);
780 for(i=0;i<n;i++)
782 if (fio->bRead)
784 ret=ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
785 srcfile, line);
786 item[i] = itmp;
788 else
790 itmp = item[i];
791 ret=ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
792 srcfile, line);
795 gmx_fio_unlock(fio);
796 return ret;
799 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
800 const char *desc, const char *srcfile, int line)
802 gmx_bool ret=TRUE;
803 int i;
804 gmx_fio_lock(fio);
805 for(i=0;i<n;i++)
807 if (fio->bRead)
809 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
810 srcfile, line);
812 else
814 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
815 srcfile, line);
818 gmx_fio_unlock(fio);
819 return ret;
824 gmx_bool gmx_fio_ndoe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
825 const char *desc, const char *srcfile, int line)
827 gmx_bool ret=TRUE;
828 int i;
829 gmx_fio_lock(fio);
830 for(i=0;i<n;i++)
832 if (fio->bRead)
834 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
835 srcfile, line);
837 else
839 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
840 srcfile, line);
843 gmx_fio_unlock(fio);
844 return ret;
849 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
850 const char *desc, const char *srcfile, int line)
852 gmx_bool ret=TRUE;
853 gmx_fio_lock(fio);
854 if (fio->bRead)
856 ret=ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
857 srcfile, line);
859 else
861 ret=ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
862 srcfile, line);
864 gmx_fio_unlock(fio);
865 return ret;
870 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
871 const char *desc, const char *srcfile, int line)
873 gmx_bool ret=TRUE;
874 int i;
875 gmx_fio_lock(fio);
876 for(i=0;i<n;i++)
878 if (fio->bRead)
880 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
881 srcfile, line);
883 else
885 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
886 srcfile, line);
889 gmx_fio_unlock(fio);
890 return ret;
895 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
896 const char *desc, const char *srcfile, int line)
898 gmx_bool ret=TRUE;
899 gmx_fio_lock(fio);
900 if (fio->bRead)
902 ret=ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
904 else
906 ret=ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
907 line);
909 gmx_fio_unlock(fio);
910 return ret;
915 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
916 const char *desc, const char *srcfile, int line)
918 gmx_bool ret=TRUE;
919 int i;
920 gmx_fio_lock(fio);
921 for(i=0;i<n;i++)
923 if (fio->bRead)
925 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
926 srcfile, line);
928 else
930 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
931 srcfile, line);
934 gmx_fio_unlock(fio);
935 return ret;
940 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
941 const char *desc, const char *srcfile, int line)
943 gmx_bool ret=TRUE;
944 int i;
945 gmx_fio_lock(fio);
946 for(i=0;i<n;i++)
948 if (fio->bRead)
950 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
951 srcfile, line);
953 else
955 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
956 srcfile, line);
959 gmx_fio_unlock(fio);
960 return ret;