Tagged files with gromacs 3.0 header and added some license info
[alexxy/gromacs.git] / include / binio.h
1 /*
2  * $Id$
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.0
11  * 
12  * Copyright (c) 1991-2001
13  * BIOSON Research Institute, Dept. of Biophysical Chemistry
14  * University of Groningen, The Netherlands
15  * 
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.
20  * 
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.
27  * 
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.
30  * 
31  * Do check out http://www.gromacs.org , or mail us at gromacs@gromacs.org .
32  * 
33  * And Hey:
34  * Good ROcking Metal Altar for Chronical Sinners
35  */
36
37 #ifndef _binio_h
38 #define _binio_h
39
40 static char *SRCID_binio_h = "$Id$";
41 #ifdef HAVE_CONFIG_H
42 #include <config.h>
43 #endif
44
45 #ifdef HAVE_IDENT
46 #ident  "@(#) binio.h 1.5 11/23/92"
47 #endif /* HAVE_IDENT */
48
49 #include <stdio.h>
50 #include "sysstuff.h"
51 #include "fatal.h"
52
53 /*
54  *    Module to binary write and read.
55  *
56  *                                        @                   
57  *    @@@   @@                            @
58  *     @     @
59  *     @  @  @   @@@   @@ @@@  @@ @@    @@@    @@ @@     @@ @@
60  *     @  @  @  @   @   @@   @  @@  @     @     @@  @   @  @@
61  *     @ @ @ @      @   @       @   @     @     @   @  @    @
62  *      @@ @@   @@@@@   @       @   @     @     @   @  @    @
63  *      @   @  @    @   @       @   @     @     @   @  @    @
64  *      @   @  @   @@   @       @   @     @     @   @   @  @@
65  *      @   @   @@@ @@ @@@@    @@@ @@@  @@@@@  @@@ @@@   @@ @
66  *                                                          @
67  *                                                         @
68  *                                                      @@@
69  *
70  *    Use this module only to write and read simple types or array(s)
71  *    of simple types. STRUCTURES ARE DEFINITELY NOT ALLOWED.
72  */
73
74 #define nblockwrite(fp,nelem,data) \
75   _blockwrite(fp,nelem,sizeof(*data),(data),#data,__FILE__,__LINE__)
76 #define blockwrite(fp,data) \
77   _blockwrite(fp,1,sizeof(data),&(data),#data,__FILE__,__LINE__)
78 #define cblockwrite(fp,ptr,nchars) \
79   _blockwrite(fp,1,(nchars),(ptr),#ptr,__FILE__,__LINE__)
80 #define nblockread(fp,nelem,data) \
81   _blockread(fp,nelem,sizeof(*data),(data),#data,__FILE__,__LINE__)
82 #define blockread(fp,data) \
83   _blockread(fp,1,sizeof(data),&(data),#data,__FILE__,__LINE__)
84 #define cblockread(fp,ptr,nchars) \
85   _blockread(fp,1,(nchars),(ptr),#ptr,__FILE__,__LINE__)
86
87 #define patch(fp,fpos,write) \
88   do \
89     { \
90       int result,fhere; \
91       \
92       fhere=ftell(fp); \
93       if ((result=fseek(fp,fpos,SEEK_SET))!=0) \
94         fatal_error(errno,"could not seek to position %d from file %s, " \
95                     "line %d, result=%d",(fpos),__FILE__,__LINE__,result); \
96       write; \
97       if ((result=fseek(fp,fhere,SEEK_SET))!=0) \
98         fatal_error(errno,"could not seek back to %d from file %s, line %d," \
99                     " result=%d",fhere,__FILE__,__LINE__,result); \
100     } \
101   while (0)
102
103 extern void _blockwrite(FILE *fp,int nelem,int size,void *data,
104                         char *what,char *file,int line);
105
106 extern void _blockread(FILE *fp,int nelem,int size,void *data,
107                        char *what,char *file,int line);
108
109 #endif  /* _binio_h */